如何仅比较SQL Server 2005中DateTime数据类型的时间部分?例如,我想在特定时间后获取MyDateField所在的所有记录。下面的例子是一个很长的,也许不是快速的方法。 我想所有的日期,其中MyDateField大于12:30:50.400比较SQL Server 2005中DateTime数据类型的时间部分
SELECT *
FROM Table1
WHERE ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) = 50) AND (DATEPART(millisecond, MyDateField) > 400))
OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) > 50))
OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) > 30))
OR ((DATEPART(hour, MyDateField) > 12))
请注意,如果您确实需要分别处理日期和时间,则会有效地破坏规范化规则。日期时间值是日期的特定时间点。日期和时间是一个多值字段,应该被分解。你的代码运行缓慢的原因是你没有正确地标准化它。 – 2010-01-04 18:26:31
@Lasse - 你会用多久?毫无疑问,您不会将日期存储在不同的字段中:日,月,年,小时,分钟,工作日,周末,季度,星期。 – JeffO 2010-01-04 18:46:23
@Lasse - 当然,我可以在日期和时间字段中分隔DateTime字段。但是,然后我会有同样的问题来比较日期和时间在一起。 – 2010-01-04 19:04:45