select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
= CONVERT(VARCHAR(20),CAST('Feb 15 2012 7:00:00:000PM' AS DATETIME),101)
我想比较没有时间的日期
以上查询可以吗?或您建议的其他更好的解决方案
最佳答案
不要使用convert-无原因地涉及字符串。一个技巧是,日期时间实际上是数字,而天是整数部分(时间是小数部分);因此,一天是值的 FLOOR :那么,这只是数学运算,而不是字符串-更快
declare @when datetime = GETUTCDATE()
select @when -- date + time
declare @day datetime = CAST(FLOOR(CAST(@when as float)) as datetime)
select @day -- date only
就您而言,无需转换回日期时间;并使用范围可以进行最有效的比较(尤其是在建立索引的情况下):
declare @when datetime = 'Feb 15 2012 7:00:00:000PM'
declare @min datetime = FLOOR(CAST(@when as float))
declare @max datetime = DATEADD(day, 1, @min)
select * from sampleTable where DateCreated >= @min and DateCreated < @max