计算BQ中不同格式的两个时间戳之间的天数
Posted
技术标签:
【中文标题】计算BQ中不同格式的两个时间戳之间的天数【英文标题】:Calculating number of days between two timestamp in different formats in BQ 【发布时间】:2015-06-09 23:19:32 【问题描述】:我是 BQ 的新手,遇到以下问题: 我想知道没有。两个时间戳之间的天数 以不同的格式输入。 例如:Date_Col1 是 2015/04/13 12:40:44.000 和 Date_Col2 输入为 4/30/2015 17:35 我尝试使用 date(timestamp(4/30/2015 17:35)) 更改格式,但每次都为空。 BQ不让我改变 Col2 的日期格式适用于 col1。另一个问题是 Date_Col2 的月份值同时输入了一位数和两位数,因此也不能使用 concat 或 substring。有时 col2 也输入为空。 我猜可以用 0 替换空值。
我想知道是否有人研究过这个用例。
以下是以不同格式计算两个日期之间的工作日的示例。它适用于其他日期,但不适用于 Vitals 日期(Date_col2 格式不同)
(DATEDIFF(TIMESTAMP(hp.ARRIVAL_TIME_PAC_TZ), TIMESTAMP(Vitals_date)) + 1) -(INTEGER((DATEDIFF(TIMESTAMP(hp.ARRIVAL_TIME_PAC_TZ), (TIMESTAMP(Vitals_date))) + 1) / 7) * 2) -(星期几(TIMESTAMP(Vitals_date))= 1 THEN 1 ELSE 0 END) -(CASE WHEN DAYOFWEEK(TIMESTAMP(hp.ARRIVAL_TIME_PAC_TZ)) = 7 THEN 1 ELSE 0 END) as AGING_GUTS_ARRIVAL_Vitals_date,
【问题讨论】:
Google Big Query 采用两种格式的时间戳,“unix 时间”,定义为自 1970 年 1 月 1 日 00:00 UTC 以来给出秒数的整数,或格式为“YYYY-MM”的字符串-DD HH:MM:SS”。就是这样。 BigQuery 中没有转换工具,例如,人工输入的数据可能采用各种格式。见cloud.google.com/bigquery/… 【参考方案1】:要将 col2 转换为时间戳,您可以使用以下命令:
timestamp(concat(
regexp_extract(col2, r"\d+/\d+/(\d+)"), "/",
regexp_extract(col2, r"(\d+)/\d+/\d+"), "/",
regexp_extract(col2, r"\d+/(\d+)/\d+"),
regexp_extract(col2, r"\d+/\d+/\d+(.*)"), ":00"))
它应该使用 1 或 2 位数字来表示月份
【讨论】:
以上是关于计算BQ中不同格式的两个时间戳之间的天数的主要内容,如果未能解决你的问题,请参考以下文章