admin

在SQL Server中无时间比较日期的最佳方法

sql

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格式保存在服务器上
  • 用户根据此数据属于不同的时区

阅读 166

收藏
2021-05-10

共1个答案

admin

不要使用convert-无原因地涉及字符串。一个技巧是日期时间实际上是一个数字,而天是整数部分(时间是小数部分);因此,一天是值的 底数
:那只是数学,而不是字符串-快得多

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
2021-05-10