CASE WHEN日期判断异常求助:结果全返回'counted'如何修复
问题修复方案
你的问题出在两个关键地方:日期常量的写法错误,以及条件逻辑和需求完全相反!
1. 核心错误:日期未加引号被当成算术运算
你写的04/17/2019没有用单引号括起来,数据库会把它解析成除法运算:4 ÷ 17 ÷ 2019,结果是一个极小的数值(≈0.000116)。不管你的create_date_time是日期类型还是字符串类型,和这个数值比较时,都会出现完全不符合预期的结果——这就是为什么所有数据都返回counted的原因。
2. 条件逻辑写反了
你的需求是:2019-04-17及之后的日期标记为'counted',之前的标记为'need counted',但你原来的CASE语句把小于这个日期的情况返回counted,完全搞反了逻辑。
正确的SQL语句
把日期用单引号括起来(使用数据库标准的YYYY-MM-DD格式,避免因日期格式设置差异导致的问题),同时调整条件逻辑:
CASE WHEN cc.create_date_time >= '2019-04-17' THEN 'counted' WHEN cc.create_date_time < '2019-04-17' THEN 'need counted' ELSE NULL END AS TIME_GAP
额外提示
如果你的日期字段是字符串格式(比如存储为MM/DD/YYYY),可以用显式的日期转换函数确保比较准确:
- MySQL/MariaDB:
STR_TO_DATE(cc.create_date_time, '%m/%d/%Y') >= '2019-04-17' - PostgreSQL:
TO_DATE(cc.create_date_time, 'MM/DD/YYYY') >= '2019-04-17' - SQL Server:
CONVERT(DATE, cc.create_date_time, 101) >= '2019-04-17'
内容的提问来源于stack exchange,提问作者something
相关产品推荐
相关产品推荐

