Sybase - 有效地过滤当前日期的记录

时间:2018-04-16 17:09:44

标签: sql sybase

我正在尝试根据当前日期(仅限日期部分)过滤记录" 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);

任何其他建议。

1 个答案:

答案 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))