在 SQL-server 中进行比较“date <= datetime”时会发生什么?

What happens when you do a comparison "date <= datetime" in SQL-server?

提问人:Jens Wagemaker 提问时间:9/15/2022 更新时间:9/15/2022 访问量:94

问:

在 SQL-server 中进行比较“date <= datetime”时会发生什么?

它们都是按日期强制执行的,还是都按日期时间强制执行以进行比较?

SQL Server 日期 时间 强制转换 比较

评论

1赞 Tim Biegeleisen 9/15/2022
你应该自己尝试一下,找出答案。
3赞 Martin Smith 9/15/2022
或参考文档。learn.microsoft.com/en-us/sql/t-sql/data-types/......- datetime 的优先级高于 date,因此日期将被强制转换为 datetime
0赞 Jens Wagemaker 9/15/2022
@MartinSmith这是一个完美的答案。想把它变成一个实际的答案吗?

答:

2赞 Martin Smith 9/15/2022 #1

datetime具有更高的优先级,因此将强制转换为 。datedatedatetime

此处记录了这一点。

或者你也可以在下面看到这个

DECLARE @D DATETIME = '2022-09-15 11:59:59';

SELECT CASE WHEN @D = CAST(@D AS DATE) THEN 'Equal' ELSE 'NotEqual' END 

(返回“NotEqual”。如果隐式强制转换是迄今为止的,并且删除的时间部分将相等)

评论

0赞 lptr 9/15/2022
如果列是日期,并且它与日期时间值/变量进行比较。然后是与无强制转换(从日期到日期时间,使用日期列索引)的范围。等
1赞 Martin Smith 9/15/2022
@lptr - 在这种情况下,看起来你会得到一个“动态搜索”dbfiddle.uk/OfMfbIPs
1赞 Charlieface 9/15/2022
@lptr 这仅当涉及索引时。常规谓词将只使用正常的隐式强制转换