select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
= CONVERT(VARCHAR(20),CAST('Feb 15 2012 7:00:00:000PM' AS DATETIME),101)
我想比较不带时间的日期
上面的查询可以吗?或您建议的其他更好的解决方案
发布于 2012-02-16 17:39:37
不要使用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
发布于 2016-04-11 23:13:15
简单地转换为Date
就可以解决这个问题。
DECLARE @Date datetime = '04/01/2016 12:01:31'
DECLARE @Date2 datetime = '04/01/2016'
SELECT CAST(@Date as date)
SELECT CASE When (CAST(@Date as date) = CAST(@Date2 as date)) Then 1 Else 0 End
发布于 2014-08-20 01:52:29
SELECT .......
FROM ........
WHERE
CAST(@DATETIMEVALUE1 as DATE) = CAST(@DATETIMEVALUE2 as DATE)
缺点是您正在强制转换筛选器列。
如果筛选列上有索引,则由于是强制转换,因此SQL引擎不能再使用索引来更有效地筛选日期。
https://stackoverflow.com/questions/9308635
复制相似问题