首页 > 解决方案 > 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 会像我所描述的那样评估这个。

我知道这也不是 SQL Server 存储日期的典型方式,问题仅仅是日期的格式吗?

当前 SQL Server 版本是:SQL Server 2014 SP3 CU3

显示相同结果的 SQL Fiddle 链接

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

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

标签: sql-server

解决方案


这是字符串比较而不是日期比较:

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<>小提琴演示

我只是好奇为什么 SQL Server 会像我所描述的那样评估它。

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


我有一个表 col1 包含值 20191216

如果要与列进行比较,则列的数据类型和数据类型优先级规则很重要


推荐阅读