为了保持在[date]
列上使用索引的任何机会(即使今天不存在,将来也可能存在),请尝试:
AND [date] >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
AND [date] < DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));
如果您使用的是 SQL Server 2008 或更高版本,则可以执行以下操作来缩短代码,但仍然使用索引[date]
是否存在:
AND CONVERT(DATE, [date]) = CONVERT(DATE, CURRENT_TIMESTAMP);
编辑
由于您似乎对为什么3/6/2012
是 3 月 6 日而不是 6 月 3 日感到困惑,我可能还建议您不要手动将模棱两可的日期文字'3/6/2012'
插入到数据库中,而是将该列设为默认值,例如:
ALTER TABLE dbo.table_roaster_time_table
ALTER COLUMN [date] DATETIME NOT NULL;
ALTER TABLE dbo.table_roaster_time_table
ADD CONSTRAINT df_date DEFAULT (CURRENT_TIMESTAMP)
FOR [date];
如果您要插入日期文字,那么至少使用一种安全且明确的格式,例如YYYYMMDD
:
INSERT dbo.table_roaster_time_table([date]) VALUES('20120603');
现在没有混乱。