1

在 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这实际上是LAST Friday!,应该是即将到来的星期五!

4

4 回答 4

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”

于 2013-07-01T18:21:18.443 回答
1

如果您当前的查询是周五给您的,那么最简单的方法就是向它添加 7:

select dateadd(d, 7-((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())
------------------^
于 2013-07-01T18:18:37.183 回答
0

SELECT CONVERT(DATE, ( CASE WHEN DATEPART(dw, GETDATE()) - 6 <= 0 THEN DATEADD(dd, ( DATEPART(dw, GETDATE()) - 6 ) * -1, GETDATE()) ELSE DATEADD(dd , ( DATEPART(dw, GETDATE()) ) - 1, GETDATE()) END )) AS NearestFriday

于 2013-07-01T18:28:45.600 回答
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

于 2013-07-01T18:54:59.440 回答