我正在尝试根据当前日期(仅限日期部分)过滤记录" date_sent"这是一个DateTime数据类型。虽然这可以用多种方式编写,但我想知道哪种方法最有效。该表在任何给定时间内都有11到12百万条记录。
我们说现在的日期是2018年4月16日
SELECT *
FROM TABLE_NAME
WHERE datepart(YEAR, date_sent) = 2018
AND datepart(MONTH,date_sent) = 4
AND datepart(DAY,date_sent) = 16;
SELECT *
FROM TABLE_NAME
WHERE convert(char(8), date_sent, 112) = convert(char(8), getdate(), 112);
任何其他建议。
答案 0 :(得分:1)
我会从:
开始select *
from table_name
where date_sent >= dateadd(day, datediff(day, 0, getdate()), 0) and
date_sent < dateadd(day, 1 + datediff(day, 0, getdate()), 0)
右侧删除当前日期的时间部分。这些比较应该允许Sybase仍然使用date_sent
上的索引。
编辑:
Sybase可能不允许0
作为日期值。你也可以这样做:
select *
from table_name
where date_sent >= dateadd(day, datediff(day, cast('2000-01-01' as date), getdate()), cast('2000-01-01' as date)) and
date_sent < dateadd(day, 1 + datediff(day, cast('2000-01-01' as date), getdate()), cast('2000-01-01' as date))