【发布时间】:2016-12-31 00:18:12
【问题描述】:
我们下面显示的 SQL 查询正在将字符串转换为时间戳字段,但在某些日期失败,而在其他日期没有失败。是什么导致此转换失败?
SELECT birthdate, TIMESTAMP(REGEXP_REPLACE(birthdate, r'(..)/(..)/(....)', r'\3-\2-\1')) ts
FROM [our_project:our_table] LIMIT 1000
这是结果。请注意,BigQuery 对许多日期都给出了“null”。为什么正则表达式失败?是否需要添加一些内容以使其更健壮?
这是我们尝试的第二个转化查询。
SELECT birthdate, TIMESTAMP(year + '-' + month + '-' + day) as output_timestamp
FROM (
SELECT
birthdate,
REGEXP_EXTRACT(birthdate, '.*/([0-9]{4})$') as year,
REGEXP_EXTRACT(birthdate, '^([0-9]{2}).*') as day,
REGEXP_EXTRACT(birthdate, '.*/([0-9]{2})/.*') AS month
FROM
[our_project:our_table]
)
LIMIT 1000
请注意,这些结果中也出现了空值。
我们如何解决问题?
【问题讨论】:
标签: sql timestamp google-bigquery