select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
=     CONVERT(VARCHAR(20),CAST('Feb 15 2012  7:00:00:000PM' AS DATETIME),101)

我想比较没有时间的日期

以上查询可以吗?或您建议的其他更好的解决方案
  • 我正在使用SQL Server 2005
  • 以UTC格式保存在服务器
  • 上的日期
  • 针对此数据的用户属于不同的时区
  • 最佳答案

    不要使用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
    

    09-30 15:20
    查看更多