在sql上表现不佳,我达到了极限。
我有一个yyyy/mm/dd
格式的日期,我需要从一周前获得所有记录“
我想我需要做一些转换工作,因为这个
d.date_begin >= DATEADD(day,-7, GETDATE())
不工作:),我在转换和数据类型上是可怕的..
答案 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)