SQL Server中每个星期五的默认日期值?

时间:2013-07-01 17:56:12

标签: sql sql-server

在SQL Server 2008中,我想设置每个星期五的默认日期值,以便在插入新记录时显示在列中?

ALTER TABLE myTable ADD CONSTRAINT_NAME DEFAULT GETDATE() FOR myColumn

每周五最好的展示方式是什么?

我希望默认值基于现在的日期,然后知道下一个可用日期为05-07/2013

我有以下内容:

dateadd(d, -((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())

但是当今天过去的时候,它给了我:2013-06-28实际上是星期五!它应该是即将到来的星期五!

4 个答案:

答案 0 :(得分:2)

SELECT DATEADD(day,-3, DATEADD(week, DATEDIFF(week, 0, current_timestamp)+1, 0)) AS LastFridayDateOfWeek 

获取当前周的最后一个日期(星期日),然后从中减去3以获得星期五。

如果您需要星期五不同的日期,请替换current_timestamp

编辑: 我想到了这一点,如果上面(周五本周,所以周六它给出了上一个日期)不起作用,你可以很容易地使用这样设置的参考日期:

DATEADD(DAY,7 + DATEDIFF(day,'20100109',@checkDateTime)/7*7,'20100108') as FridayRefDate

同样的事情,但周五/周六没有硬编码:

DATEADD(DAY,7 + DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,@checkDateTime),5),@checkDateTime)/7*7,DATEADD(wk, DATEDIFF(wk,0,@checkDateTime), 4))

因此20100109是星期五。

SET @checkDateTime = '2012-01-14 3:34:00.000'
SELECT DATEADD(DAY,7 + DATEDIFF(day,'20100109',@checkDateTime)/7*7,'20100108') as FridayRefDate

它返回“2012/1/20”

但对于SET @checkDateTime = '2012-01-13 3:34:00.000',它会返回“2012/1/13”

答案 1 :(得分:1)

如果您当前的查询为您提供 last 星期五,最简单的方法就是向其添加7:

select dateadd(d, 7-((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())
------------------^

答案 2 :(得分:0)

SELECT CONVERT(DATE,(DATEPART时的情况(dw,GETDATE()) - 6< = 0                              那么DATEADD(dd,                                           (DATEPART(dw,GETDATE()) - 6)* -1,                                           GETDATE())                              ELSE DATEADD(dd,(DATEPART(dw,GETDATE())) - 1,                                           GETDATE())                         END))AS NearestFriday

答案 3 :(得分:0)

只需在公式

中添加7即可
SELECT DATEADD(dd,CAST(5-GETDATE() AS int)%7,GETDATE()+7)

验证公式:

WITH test AS (
  SELECT GETDATE() AS d UNION ALL
  SELECT DATEADD(dd,1,d)
  FROM test WHERE d < GETDATE() + 30
)
SELECT
 d                                  AS [input],
 DATEADD(dd,CAST(5-d AS int)%7,d+7) AS [output]
FROM test

要调整公式,请调整5-和+7