11

我无法获得今天创建的所有行。我使用了多个函数,如getdate(), Cast,Convert等,但都是徒劳的。

这是我的基本查询:

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

我想timeId从将提供的表格table_roaster_time_table中获取userid日期,日期是今天。

我该怎么做呢?

4

1 回答 1

28

为了保持在[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');

现在没有混乱。

于 2012-06-03T16:04:01.383 回答