如何僅比較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