我有两个带有时间戳值的 Redshift 表。其中一个具有本地值,但有一些空值,另一个具有 GMT,但没有空值。表 2 中还有一个国家/地区列。 我想查询本地时间值,并根据空值所在的国家/地区将 COALESCE 与 CASE 结合使用。 我尝试过
CASE
WHEN (T1.local_time = '' OR T1.local_time=NULL) AND T2.country = 'UK' THEN T2.gmt_time
WHEN (T1.local_time = '' OR T1.local_time=NULL) AND T2.country = 'ES' DATEADD(hour, 1, T2.gmt_time)
...
ELSE T2.gmt_time END AS final_time
但它没有捕获空值。 COALESCE (NVL) 允许我捕获 NULL 值,但我不确定将案例放置在哪里。我尝试过:
COALESCE (T1.local_time,
CASE
WHEN T2.country = 'UK' THEN DA
WHEN T2.COUNTRY = 'SP' THEN DATEADD(hour, 1, T2.gmt_time)
...
ELSE T2.gmt_time END AS local_time)
AS time_final)
但是我收到错误。查询非常大,因此我想避免使用临时表。有什么解决办法吗? 提前致谢
最佳答案
对于遇到此问题的任何人,要在 COALESCE 语句中正确编写 CASE 语句,应按如下方式修改代码:
COALESCE (T1.local_time,
CASE
WHEN T2.country = 'UK' THEN DA
WHEN T2.COUNTRY = 'SP' THEN DATEADD(hour, 1, T2.gmt_time)
...
ELSE T2.gmt_time END) AS time_final
关于sql - COALESCE 内的 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332965/