【发布时间】:2019-05-10 13:35:02
【问题描述】:
使用 Google BIGQUERY,我需要检查名为birth_day_col 的列中的值是否是正确且所需的日期格式:YYYY-MM-DD。此列中的值定义为 STRING。此外,此列中的值目前采用以下格式:YYYY-MM-DD。
我在互联网上进行了大量研究,发现了一个有趣的解决方法。以下查询:
SELECT
DISTINCT birth_day_col
FROM `project.dataset.datatable`
WHERE birth_day_col LIKE '[1-2][0-9][0-9][0-9]/[0-1][0-9]/[0-3][0-9]'
AND country_code = 'country1'
但结果是:“此查询未返回任何结果。”
然后我使用以下代码检查了 NOT:
SELECT
DISTINCT birth_day_col
FROM `project.dataset.datatable`
WHERE NOT(birth_day_col LIKE '[1-2][0-9][0-9][0-9]/[0-1][0-9]/[0-3][0-9]')
AND country_code = 'country1'
令人惊讶的是,它给出了birth_dat_col 中的所有值,我已经验证并且日期格式正确,但这个结果很可能是巧合。
很奇怪(错误),我使用的查询应该只导致错误的日期格式,但它实际上给了我正确的日期。这两个查询的所有内容似乎都在颠倒每个人的角色。
对此业务案例的任何查询的预期结果是计算所有格式不正确的日期(即使当前为 0)。
感谢您的帮助!
罗伯特
【问题讨论】:
-
您的查询使用正斜杠
/而不是破折号-作为日期组件分隔符。 ISO 8601 使用破折号,而不是斜线。 -
感谢您的反馈。我没有提到它。认为这无关紧要。我已经尝试使用
-instad of/,但我得到了相同的结果。使用.而不是/时相同。 -
你试过用
REGEX_CONTAINS代替LIKE吗? -
当我使用
NOT函数时,它看起来几乎完全绕过了LIKE函数,而是执行标准SELECT,只检查WHERE country_code = 'country1'。
标签: google-bigquery