SQL Server是否确定硬编码日期较大?

时间:2019-12-27 15:27:49

标签: sql-server

一位老员工留下了我一直在调试的大量查询,看来问题出在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

请注意,该链接不包含我的案例的精确副本

编辑:包括与实际查询相关的其他信息。

1 个答案:

答案 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

db<>fiddle demo

  

我只是好奇为什么SQL Server会像我描述的那样对此进行评估。

'12/15/2019'是一个字符串文字,除非您明确表示意图,否则SQL Server不知道您要对待日期。


  

我有一个表,其中的列col1包含值20191216

如果您要与一列进行比较,则该列的数据类型很重要,data type precedence rules