Kingbase错误:CASE 的类型 TEXT 和 TIMESTAMP 不匹配/和numeric不匹配

正常sql中case when的使用方法:

image.png

图片来源

然而kingbase实际使用中,会出现CASE 的类型 TEXT 和 TIMESTAMP 不匹配等各种错误,例子如下:

'
成交时间
' ||case when min2.DT_BUY_DATE is null then '' else min2.DT_BUY_DATE end

这是拼接字符串时判空所写的语句,其中min2.DT_BUY_DATE在表中为时间戳类型。
报错的原因是时间戳和判空后then后面的类型不一致。对的,你没看错,kingbase要求case when aaa then bbb else ccc中,aaa、bbb、ccc三个值的类型要一致。我不清楚这算feature还是bug,反正就是这个要求,逻辑上不存在什么合理性。

解决方法也很简单,查阅kingbase手册,只要用to_char函数将所有类型都化为字符型就ok了,如下:

'
成交时间
' ||case when to_char(min2.DT_BUY_DATE,'yyyy-MM-dd HH24:mm:ss') is null then '' else to_char(min2.DT_BUY_DATE,'yyyy-MM-dd HH24:mm:ss') end

此外,也会常碰到判断条件是数值类型,then和else返回字符类型的场景,同样用to_char可解决此类报错,例子如下:

'
价款缴纳方式
' ||case when to_char(min2.IN_COST_STYLE) is null then '' else ( case when to_char(min2.IN_COST_STYLE)='1' then '一次性缴清' when to_char(min2.IN_COST_STYLE)='2' then '分期付款' end)end

其中min2.IN_COST_STYLE为数值型

你可能感兴趣的:(Kingbase错误:CASE 的类型 TEXT 和 TIMESTAMP 不匹配/和numeric不匹配)