1

比如说,如果 'dtIn' 的类型是 DATETIME2,那么使用 SQL Server 2008 进行以下比较是否安全?

--my concern is about equality part, 
-- or will it pick ALL 2012-09-09 22:30:00 dates?
SELECT * FROM tbl WHERE [dtIn] <= '2012-09-09 22:30:00'

我要问的原因是一种可能的情况,即这种比较在编程语言中可能是“坏的”,其中日期存储为“双精度”,或自 1980 年午夜以来的毫秒数,或类似的东西。这样的值存储为浮点数,比较相等总是一个坏主意。

4

1 回答 1

1
SELECT * FROM tbl WHERE [dtIn] <= '2012-09-09T22:30:00'

这只会选择dtIn完全等于'2012-09-09T22:30:00'或更早的行。它不会选择dtIn等于的行,比如说'2012-09-09T22:30:00.003'

我通常建议为日期/时间比较选择一个专有端点 - 它们更容易推理:

SELECT * FROM tbl WHERE [dtIn] < '2012-09-09T22:30:01'

(注意 - 我T在我的文字中插入了日期和时间。对于转换为datetime2,我认为间隔版本是安全的,但如果你正在处理datetime列,间隔版本可能会模棱两可 - 所以我倾向于玩东西安全的)

于 2012-09-10T06:00:32.537 回答