计算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中不同格式的两个时间戳之间的天数的主要内容,如果未能解决你的问题,请参考以下文章

php日期时间函数

php如何计算两个时间戳之间相差的日时分秒

Impala SQL - 如何计算时间戳之间的月份?

Hivesql计算两个时间戳相差的分钟数

VBA 锻炼两个时间戳之间的天数、小时数、分钟数或秒数?

js怎么输出当前日期和指定日期的相隔天数?谢谢