【发布时间】:2016-03-24 19:54:30
【问题描述】:
我遇到了 COALESCE 函数的问题,当应用于 TIMESTAMP 字段时,它会将其转换为 INTEGER 这是一个例子
SELECT
c_date AS c_date,
COALESCE(nd.c_datetime, od.c_datetime) AS c_datetime,
COALESCE(nd.c_timestamp, od.c_timestamp) AS c_timestamp
FROM [table1] as nd
LEFT JOIN [table2] as od ON nd.c_date = od.c_date ";
虽然两个表中的所有 3 个字段都具有 TIMESTAMP 类型,但查询将返回第一个作为 TIMESTAMP,但所有其他字段都将变为 INTEGER。这是预期的行为吗?
附:我找到了解决方法
USEC_TO_TIMESTAMP(COALESCE(nd.c_datetime, od.c_datetime)) AS c_datetime
但很奇怪,简单的合并需要特殊操作来保留类型
附言我知道谷歌的人正在阅读 stackoverflow。作业 ID 是 job_vM_1Kxo4NBp5Ae3VmLmAI-4OXpo 。希望对你有帮助!
【问题讨论】:
-
这绝对不是特定于您给定的 SELECT 作业。尝试
SELECT CURRENT_TIMESTAMP(), COALESCE(CURRENT_TIMESTAMP(), NULL)查看您描述的行为。所以它可能是一个错误 -
我认为,去年为分析功能修复了类似的错误stackoverflow.com/questions/31966756/… cc: @moshapasumanski
-
@MikhailBerlyant 是的,该查询也重现了这种行为。希望这个错误可以尽快修复。
-
已确认错误 - 为了获得更好的跟踪,如果您将其提交到 code.google.com/p/google-bigquery 会有所帮助
-
@MoshaPasumansky 完成,第 479 期
标签: google-bigquery