RTh*_*mas 2 sql-server-2008 sql-server datetime
想要从一天中获取所有记录。所以2013-03-05 00:00:00.000和之间的一切2013-03-05 23:59:59.999。我们在后端与发生在2013-03-06 00:00:00.000.
因此,在测试中,我在 SSMS 中运行:
select cast('2013-03-05 23:59:59.999' as datetime)
select cast('2013-03-05 23:59:59.996' as datetime)
select cast('2013-03-05 23:59:59.994' as datetime)
Run Code Online (Sandbox Code Playgroud)
并得到:
2013-03-06 00:00:00.000
2013-03-05 23:59:59.997
2013-03-05 23:59:59.993
Run Code Online (Sandbox Code Playgroud)
毫秒部分会稍微回落。在第一行的情况下,它真的很重要。因为我不想要 2013-03-06 00:00:00.000 - 我想要午夜前一毫秒。
TSQL 在文档中声明它使用小数秒,而不是使用毫秒的 .Net 日期时间。这似乎只是语法上的差异,但如果您真的关心 TSQL 中的毫秒精度,您是否会被迫全面使用DateTime2。从datetime2to 转换datetime仍然会在几毫秒内把事情搞砸。
在 c# 中DateTime.Parse("03/5/2013 23:59:59.999").Millisecond仍然返回 999。
我这样解释好吗?如果我关心毫秒精度,我datetime2只坚持使用。
通常,这将是一个简单的修复,但在这种情况下,我们使用的是datetime作为参数接收的 Microsoft 系统函数。
由于四舍五入,您必须指定 23:59:59.997 而不是指定 23:59:59.999。
更好的方法是:
WHERE MyDate >= '2013-03-05' AND MyDate < '2013-03-06'
Run Code Online (Sandbox Code Playgroud)
由于这捕获了 2013-03-05 的所有活动
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |