You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spanner数据库中用SQL检测列的NULL值(含String、Timestamp类型)

问题根因

Google Cloud Spanner的CASE表达式要求所有返回分支的数据类型必须兼容,你当前的写法中THEN分支返回字符串'A'(STRING类型),如果待检测的列是TIMESTAMP类型,两个分支类型不匹配,就会出现无法正常替换NULL值、始终返回原始列值的问题。

正确实现方式

待检测列为STRING类型

直接使用IFNULL函数即可实现NULL值替换,逻辑比CASE更简洁:

SELECT IFNULL(t.locked_by, 'A')
FROM Temp1 t WHERE name='test2'

原有CASE写法本身逻辑没有问题,确认列是STRING类型即可正常运行。

待检测列为TIMESTAMP类型

需要先统一返回值类型,可选两种实现方案:

  • 方案1:将时间戳转为STRING类型,统一返回字符串
SELECT IFNULL(CAST(t.locked_by AS STRING), 'A')
FROM Temp1 t WHERE name='test2'
  • 方案2:使用特殊时间戳作为NULL的标记值,统一返回TIMESTAMP类型
SELECT 
  CASE WHEN t.locked_by IS NULL THEN TIMESTAMP('1970-01-01 00:00:00 UTC')
  ELSE t.locked_by
  END
FROM Temp1 t WHERE name='test2'

内容的提问来源于stack exchange,提问作者user3702620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:15:03