2013-07-01 52 views
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這實際上是最後一個星期五!它應該是和未來的星期五!

+0

所以你希望某列的默認值是最近即將到來的星期五? –

+3

HTTP://計算器。com/questions/5998084/get-the-most-recent-fridays-date -sql –

+0

我希望默認值基於現在的日期,然後知道下一個可用日期是'05-07/2013' – PriceCheaperton

回答

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日」

+0

這很美... –

1

如果您當前的查詢讓你最後週五,最容易做的事情很簡單,就是加7:

select dateadd(d, 7-((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate()) 
------------------^ 
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

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