获取今天创建的所有行

时间:2012-06-03 16:01:04

标签: sql-server

我无法获取今天创建的所有行。我使用了getdate()CastConvert等多种功能,但都是徒劳的。

这是我的基本查询:

SELECT timeId
FROM table_roaster_time_table
WHERE (user_id = @user_id) AND (DATEDIFF(d, date, GETDATE()) = 0)

我希望从timeId表中获取table_roaster_time_table,其中userid将提供,日期就是今天。

我该怎么做?

1 个答案:

答案 0 :(得分:25)

为了保留在[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'的模糊日期文字插入到数据库中,而是将列设为a默认如:

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');

现在没有混淆。