Ali*_*Ali 20 sql sql-server datetime utc
select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
= CONVERT(VARCHAR(20),CAST('Feb 15 2012 7:00:00:000PM' AS DATETIME),101)
Run Code Online (Sandbox Code Playgroud)
我想没有时间比较日期
以上查询还可以吗?或者你建议其他更好的解决方案
Mar*_*ell 26
不要使用转换 - 无缘无故涉及字符串.一个技巧是日期时间实际上是一个数字,而日期是整数部分(时间是小数部分); 因此,这一天是价值的FLOOR:这只是数学,而不是字符串 - 更快
declare @when datetime = GETUTCDATE()
select @when -- date + time
declare @day datetime = CAST(FLOOR(CAST(@when as float)) as datetime)
select @day -- date only
Run Code Online (Sandbox Code Playgroud)
在您的情况下,无需转换回日期时间; 并使用范围允许最有效的比较(特别是如果索引):
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
Run Code Online (Sandbox Code Playgroud)
小智 22
Simple Cast 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
Run Code Online (Sandbox Code Playgroud)
不要将您的 Date 转换为 varchar 并进行比较,因为字符串比较并不快。
如果您使用>=
和<
过滤您的DateCreated
列,速度会快得多。
如果您没有参数(如您的示例中的字符串),则应使用 ISO 格式<Year><Month><Day>
。
根据您的样品
DECLARE @startDate DateTime
DECLARE @endDate DateTime
SET @startDate = '20120215'
SET @endDate = DATEADD(d,1,@startDate)
SELECT * FROM sampleTable
WHERE DateCreated >= @startDate AND DateCreated < @endDate
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT .......
FROM ........
WHERE
CAST(@DATETIMEVALUE1 as DATE) = CAST(@DATETIMEVALUE2 as DATE)
Run Code Online (Sandbox Code Playgroud)
缺点是您正在转换过滤器列。
如果过滤器列上有索引,则由于您正在强制转换,因此SQL引擎将无法再使用索引更有效地过滤日期。
归档时间: |
|
查看次数: |
71754 次 |
最近记录: |