从列中检索日期部分

时间:2012-03-26 07:32:46

标签: sql-server

列名rcvdate,具有日期时间类型,值如下:

2009-10-20 10:00:00

我想做一个选择,我的查询:

SELECT * 
FROM data 
WHERE rcvdate = '2009-10-20' 

不工作,我期待运行查询,因为我检查了很多查询,但它们没有用。

3 个答案:

答案 0 :(得分:7)

如果您想要一天的所有行,请检查间隔:

SELECT * 
FROM data 
WHERE rcvdate >= '20091020' AND
      rcvdate < DATEADD(day, 1, '20091020')

从SQL Server 2008中,您可以使用此代码:

SELECT * 
FROM data 
WHERE CAST(rcvdate as DATE) = '2009-10-20'

Cast to date is sargable but is it a good idea?

答案 1 :(得分:2)

SELECT * FROM data WHERE CONVERT(rcvdate, date) = '2009-10-20'

您应该将datetime-field转换为date-field,因为在您的查询'2009-10-20'中转换为datetime'2009-10-20 00:00:00'

<强> UPD:

SELECT * FROM data WHERE CAST(rcvdate AS date) = '2009-10-20'

会有相同的结果。

答案 2 :(得分:1)

你可以走到哪里,它始终有效,谢谢

SELECT * FROM data WHERE 
   DATEDIFF(dd,0,rcvdate ) 
      BETWEEN DATEDIFF(dd,0,'2009-10-20') AND
      DATEDIFF(dd,0,'2009-10-20')

这里是参考,你可以用不同的方式来转换日期。 http://www.sqlusa.com/bestpractices/datetimeconversion/

由于