将 TIME 添加到 DATETIME 值

Dev*_*ter 1 google-bigquery

我可以从文档中看到,该文档DATETIME_ADD仅适用于INT64值,不适用于TIME对象。

我有一个DATETIME代表开始点,然后是TIME对象中的持续时间

WITH input AS (
  SELECT
    DATE(2018,03,05) AS start_date,
    TIME(5,0,0) AS start_time,
    TIME(8,0,0) AS duration
)

SELECT
  *,
  DATETIME(start_date,start_time) AS start_datetime,
  DATETIME_ADD(
      DATETIME_ADD(
        DATETIME_ADD(
          DATETIME(start_date,start_time), 
          INTERVAL EXTRACT(HOUR FROM duration) HOUR
        ),
        INTERVAL EXTRACT(MINUTE FROM duration) MINUTE
      ),
        INTERVAL EXTRACT(SECOND FROM duration) SECOND
    ) AS end_datetime

FROM input
Run Code Online (Sandbox Code Playgroud)

是否存在更好的方法将TIME对象的 3 个值(小时、分钟、秒)添加到给定DATETIME对象?

Mik*_*ant 5

以下是 BigQuery 标准 SQL

WITH input AS (
  SELECT
    DATE(2018,03,05) AS start_date,
    TIME(5,0,0) AS start_time,
    TIME(8,0,0) AS duration
)
SELECT
  *,
  DATETIME(start_date,start_time) AS start_datetime,
  DATETIME_ADD(
      DATETIME_ADD(
        DATETIME_ADD(
          DATETIME(start_date,start_time), 
          INTERVAL EXTRACT(HOUR FROM duration) HOUR
        ),
        INTERVAL EXTRACT(MINUTE FROM duration) MINUTE
      ),
        INTERVAL EXTRACT(SECOND FROM duration) SECOND
    ) AS end_datetime,
    DATETIME_ADD(
      DATETIME(start_date,start_time), 
      INTERVAL DATETIME_DIFF(DATETIME(start_date,duration), DATETIME(start_date), SECOND) SECOND
    ) end_datetime_nicer_way
FROM input
Run Code Online (Sandbox Code Playgroud)