我正在尝试范围连接两个表,如下所示
SELECT *
FROM main_table h
INNER JOIN
test.delay_pairs d
ON
d.interval_start_time_utc < h.visitStartTime
AND h.visitStartTime < d.interval_end_time_utc其中h.visitStartTime是INT64时期,d.interval_start_time_utc和d.interval_end_time_utc是适当的TIMESTAMP。
以上操作失败,并显示以下内容
No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY在TIMESTAMP()和CAST(d.interval_start_time_utc AS INT64)中包装h.visitStartTime都不起作用。如何在BigQuery的标准SQL方言中使这两种语言具有可比性?
发布于 2016-06-16 23:43:29
你可以使用像TIMESTAMP_SECONDS,TIMESTAMP_MILLIS,TIMESTAMP_MICROS这样的timestamp conversion functions
例如,假设您的h.visitStartTime是从unix时代开始的微秒数。
SELECT *
FROM main_table h
INNER JOIN test.delay_pairs d
ON d.interval_start_time_utc < TIMESTAMP_MICROS(h.visitStartTime)
AND TIMESTAMP_MICROS(h.visitStartTime) < d.interval_end_time_utc 发布于 2018-06-24 18:50:53
对于标准 sql,您可以使用其中之一,具体取决于精度:
DATE_FROM_UNIX_DATE -从天时期到dateTIMESTAMP_SECONDS -从秒时期到timestampTIMESTAMP_MILLIS -从毫秒时期到timestampTIMESTAMP_MICROS -从微秒时期到时间戳使用遗留 sql,您只需使用TIMESTAMP函数并乘以或除以1000,即可将其转换为所需的纪元类型:
SELECT
TIMESTAMP(epoch_in_millis / 1000) AS datetime
FROM
my_tablehttps://stackoverflow.com/questions/37861500
复制相似问题