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

前端之家收集整理的这篇文章主要介绍了在SQL Server中无需时间比较日期的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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格式保存的日期
>针对此数据的用户属于不同的时区

解决方法

不要使用转换 – 无缘无故地涉及字符串.一个技巧是日期时间实际上是一个数字,而日期是整数部分(时间是小数部分);因此,这一天是价值的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

猜你在找的MsSQL相关文章