Sql server 正在获取今天创建的所有行

Sql server 正在获取今天创建的所有行,sql-server,Sql Server,我无法获取今天创建的所有行。我使用了多个函数,如getdate(),Cast,Convert,但都是徒劳的 这是我的基本疑问: SELECT timeId FROM table_roaster_time_table WHERE (user_id = @user_id) AND (DATEDIFF(d, date, GETDATE()) = 0) 我想从表table\u roaster\u time\u table中获取timeId,其中将提供userid,日期为今天 如何做到这一点?为了保留在

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

这是我的基本疑问:

SELECT timeId
FROM table_roaster_time_table
WHERE (user_id = @user_id) AND (DATEDIFF(d, date, GETDATE()) = 0)
我想从表
table\u roaster\u time\u table
中获取
timeId
,其中将提供
userid
,日期为今天


如何做到这一点?

为了保留在
[date]
列上使用索引的机会(即使现在不存在索引,将来也可能存在),请尝试:

编辑

由于您似乎不明白为什么
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');

现在没有混淆。

+1我喜欢使用CONVERT(DATE,x)来截断时间部分。@usr我不知道OP可以使用
DATE
,因为没有指定SQL Server的版本。当我有疑问时,我总是尽量记住使用最小公分母(这将在2000年和2005年一直持续到2012年)。@AaronBertrand+1。出于兴趣,使用
CURRENT\u TIMESTAMP
GetDate()
有什么好处吗?@Bridge只是我的首选,因为它是ANSI标准,而
GetDate()
不是。当没有其他差异(真实的或感知的)时,我会努力坚持标准。在这种情况下,如果我想使用本地日期/时间,我只能这样做,因为它们没有为UTC提供等效的日期/时间(在这种情况下,我使用
SYSUTCDATETIME()
)。@waqar这是最糟糕的方法。您的问题实际上更多地与您存储2012年3月6日有关,并认为这是6月3日,而实际上是3月6日。您需要正确存储日期,还需要注意将日期转换为varchar是执行您尝试执行的操作最不有效的方法的建议-您是否阅读了可能的副本?还有,你到底希望这个问题有什么意义?其中月份(存储日期)=天(今天)?我真搞不懂你为什么认为这是正确的结果。这没有用。这两个答案我都试过了。但是我为日期设置的数据类型是datetime。另一件事是,我不能使用像“6/01/2012”这样的静态值,因为我想每天设置烘焙机的时间表,为此我需要每天的当前日期。我还使用了DAY(date)=DAY(getdate()),但它也不起作用。并且为timeid检索空值,但我已经有两条记录,一条记录为2012年3月6日,另一条记录为2012年2月6日日期和记录。您确定“2012年3月6日”是6月3日而不是3月6日吗?您还应该避免使用保留(非常模糊)像
date
这样的词作为列名。
created\u date
较长,但它避免了保留关键字,更好地描述了该列中的数据。可能存在重复的
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];
INSERT dbo.table_roaster_time_table([date]) VALUES('20120603');