在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
实际上是星期五!它应该是即将到来的星期五!
答案 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