使用场景:在一些小的需求,为了一次性将数据统计到位,在代码中少出现一些转化的代码,习惯性的在sql语句中加一些判空、枚举之类的进行转化,尤其是在现场数据治理的时候,比方说现场要导出一些基础台账数据等,这个时候就可以很方便的提供一条sql语句(开发过程一般是不建议在sql语句中处理这种转化逻辑的,严格在定义枚举在转化层进行处理)
常规写法:
case t1.is_enable
when 1 then 0
when 0 then 1
when 2 then 2
end as isEnable
错误写法:
case t1.start_date
when is null then ''
else FROM_UNIXTIME(t1.start_date/1000, '%Y-%m-%d %H:%i:%s')
end
正确写法:
case
when t1.invalid_end_date is null then ''
else FROM_UNIXTIME(t1.invalid_end_date/1000, '%Y-%m-%d %H:%i:%s')
end as invalidEndTime
总结:
简单 CASE 形式:CASE column WHEN value THEN...
搜索 CASE 形式:CASE WHEN condition THEN...
第二种写法不会报错是因为它正确使用了简单 CASE 形式:
t1.is_enable 是列名
1, 0, 2 是具体的值
这种形式用于直接比较列的值
第二种写法 is null 是一个条件判断,但却使用了简单 CASE 的形式,导致语法错误。
总结:
当需要比较列值是否等于某个特定值时,使用: CASE 列名 WHEN 值 THEN...
当需要判断条件(如 IS NULL,>,<,LIKE 等)时,必须使用: CASE WHEN 条件 THEN...