我尝试使用转换功能将datetime
转换为date
。但由于表格中有大量数据,因此需求量很大。
如果没有在更短的时间内使用转换功能,还有其他方法可以做到这一点。
查询:
Select *
from address
where convert(date,record-created_date) between '6/29/2016' and '6/30/2016'
答案 0 :(得分:2)
您可以简单地删除CONVERT
函数作为以下查询,因此没有时间用于转换,而是您必须在[record-created_date]
子句中的WHERE
列中添加时间:< / p>
SELECT *
FROM [address]
WHERE [record-created_date] BETWEEN '6/29/2016 00:00:00:000' AND '6/30/2016 23:59:59:999'
答案 1 :(得分:1)
使用SQL 2008,您可以使用CAST
:
select cast(record-created_date as date)
在旧版本中,您可以使用DATEADD/DATEDIFF
:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, record-created_date))
答案 2 :(得分:1)
您可以在高级中定义2个常量,从而避免在列上使用转换函数:
declare @min_date datetime
declare @max_date datetime
set @min_date = convert(datetime, '06/29/2016', 101)
-- Max date needs to be the next date of your end date
set @max_date = convert(datetime, '06/30/2016', 101) + 1
Select *
from address
where record-created_date >= @min_date
and record-created_date < @max_date
答案 3 :(得分:1)
只需省略转化并将一天添加到结束日期:
where record_created_date between '6/29/2016' and '7/1/2016'
这被解释为<= '7/1/2016 0:00'
,因此只有在包含第二天午夜的情况下才可以使用此简短形式。否则使用长格式:
where record_created_date >= '6/29/2016' and record_created_date < '7/1/2016'
...或者添加时间:
where record_created_date between '6/29/2016' and '6/30/2016 23:59:59.999'
顺便说一句,我认为最好将日期格式'2016-06-29'用于硬编码日期。
无论如何,缓慢的主要原因很可能是本专栏的缺失索引。