以yyyy / mm / dd表示的SQL日期比较

时间:2017-03-31 10:52:01

标签: sql sql-server

在sql上表现不佳,我达到了极限。 我有一个yyyy/mm/dd格式的日期,我需要从一周前获得所有记录“ 我想我需要做一些转换工作,因为这个

d.date_begin >= DATEADD(day,-7, GETDATE())

不工作:),我在转换和数据类型上是可怕的..

6 个答案:

答案 0 :(得分:1)

如果您想要7天前的记录,直至并包括今天的记录

,这将有效
CAST(d.date_begin AS DATE) >= CAST(DATEADD(day,-7, GETDATE()) AS DATE)

答案 1 :(得分:1)

where DATEDIFF(month,Your_date_column,getdate()) < 3

答案 2 :(得分:0)

SQL Server 2012及更高版本,如果date_begin的数据类型为date

where d.date_begin >= cast(DATEADD(day,-7, GETDATE()) as date)

无论时间如何,这都会在过去7天内得到任何结果

答案 3 :(得分:0)

您应该使用本机格式存储日期/时间值。好的,有时我们做不到。但您可以轻松地将值转换为正确的格式:

where cast(replace(d.date_begin, '/', '') as date) >= DATEADD(day, -7, GETDATE())

我应该注意到SQL Server非常适合转换,因此您的初始代码不应生成任何错误 - 除非您有异常的国际化设置。

或者,实际上,更好的方法是将当前值转换为字符串:

where d.date_begin >= format(dateadd(day, -7, getdate()), 'yyyy/MM/dd')

这样做更好,因为它是&#34; sargable&#34;,这意味着SQL Server可以在列上使用索引(如果可用)。

答案 4 :(得分:0)

SELECT * FROM tbl_name
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

答案 5 :(得分:0)

不要操纵d.date_begin。在比较时对列进行计算会产生不良性能。您应该操纵getdate()以获得与d.date_begin相同的格式。在这种情况下,它的工作原理是格式为yyyy / MM / dd - 比较结果与两列都是日期列的结果相同。

WHERE
  d.date_begin >= convert(char(10),DATEADD(day,-7, GETDATE()), 111)