一位老员工留下了我一直在调试的大量查询,看来问题出在SQL Server本身确定比较的方式与我预期的不同。
我有一个表,其中的列col1
包含值20191215
作为日期时间。
有问题的部分与以下内容相似:
select case when col1 > '01/01/2020' then 1 else 0 end
此语句返回1
,表明'12/15/2019'
大于'01/01/2020'
。
我不需要进行更正查询的帮助,因为我已经进行了更改,而不是使用以前的雇员进行的比较,我只是好奇为什么SQL Server会像我描述的那样对此进行评估。< / p>
我知道这不是SQL Server也会通常存储日期的方式,问题仅仅是日期的格式吗?
当前SQL Server版本为:SQL Server 2014 SP3 CU3
。
SQL Fiddle link that shows the same results
请注意,该链接不包含我的案例的精确副本
编辑:包括与实际查询相关的其他信息。
答案 0 :(得分:3)
这是字符串比较,而不是日期比较:
select case when '12/15/2019' > '01/01/2020' then 1 else 0 end
vs
select case when CAST('12/15/2019' AS DATE) > CAST('01/01/2020' AS DATE) then 1 else 0 end
我只是好奇为什么SQL Server会像我描述的那样对此进行评估。
'12/15/2019'
是一个字符串文字,除非您明确表示意图,否则SQL Server不知道您要对待日期。
我有一个表,其中的列col1包含值20191216
如果您要与一列进行比较,则该列的数据类型很重要,data type precedence rules