2013-05-07 72 views
1

我有日期和日期。現在我想知道當天是第一還是第二還是第三或第四周。需要從sql中的日期查找第n次出現的日期號

假設我今天通過日期。然後它應該返回本月的「第一個星期二」。

如果我通過2013年5月18日,那麼它應該返回「本月的第3個星期六」。 如果我通過2013年5月31日,那麼它應該返回「本月的第5個星期五」。

我該如何做到這一點?

+0

w.y.t.演示:你試過了什麼? – Freelancer 2013-05-07 12:22:21

回答

2

在這裏你去

DECLARE @date DATETIME; 

SET @date = '2013-08-30' 
select 
case when DATEPART(dd,@date)<=7 then '1st '+datename(DW,@date) 
when DATEPART(dd,@date)>7 and DATEPART(dd,@date)<=14 then '2nd '+datename(DW,@date) 
when DATEPART(dd,@date)>14 and DATEPART(dd,@date)<=21 then '3rd '+datename(DW,@date) 
when DATEPART(dd,@date)>21 and DATEPART(dd,@date)<=28 then '4th '+datename(DW,@date) 
when DATEPART(dd,@date)>28 and DATEPART(dd,@date)<=31 then '5th '+datename(DW,@date) end 
+0

謝謝......它爲我工作。 – 2013-05-07 13:22:34

1

那麼,如果XXX日期的數字在1到7之間,那麼它是該月的第一個XXX,如果它在8到14之間,則是該月的第二個XXX,如果是15到21之間,則是第3個XXX當月,如果是22和28之間,這是本月4日XXX,如果它是超過28它是本月5日XXX ...

2

試試這個,

DECLARE @date DATETIME; 
DECLARE @week INT; 

SET @date = getdate() 

SELECT @week = datepart(wk, @date) - datepart(wk, convert(DATETIME, cast(month(getdate()) AS VARCHAR) + '/01/' + cast(year(getdate()) AS VARCHAR)) + 1) 

SELECT CASE WHEN @week = 1 THEN '1st ' WHEN @week = 2 THEN '2nd ' WHEN @week = 3 THEN '3RD ' ELSE '4th ' END + DATENAME(weekday, @date) + ' of the month' 
+0

請檢查您的代碼日期'2013-08-30'..它應該返回本月的第5個星期五..而不是它返回本月的第4個星期五。 – 2013-05-07 12:49:38

+0

你也可以檢查2013年5月31日。 – 2013-05-07 12:52:03

+0

簡單,只需要再添加一個case語句。 – Maximus 2013-05-08 04:02:57

4
SELECT 
-- Do you need this: (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST % 7) 
CASE 1 + (DATEPART(DAY, GETDATE()) - 1)/7 
    WHEN 1 THEN '1St' 
    WHEN 2 THEN '2nd' 
    WHEN 3 THEN '3rd' 
    WHEN 4 THEN '4th' 
    ELSE '5th' 
END 
+ ' ' 
+ DATENAME(dw, GETDATE()) 
+ ' of the month' 
1

還有一個選項

DECLARE @date datetime = GETDATE() 
SELECT CASE DATEPART(ww, @date) - (DATEPART(ww, DATEADD(DAY, 1 - DAY(@date), @date)) 
     - CASE WHEN DATEPART(dw, DATEADD(dd, 1 - DAY(@date), @date)) <= DATEPART(dw, @date) THEN 1 ELSE 0 END) 
     WHEN 1 THEN '1st ' 
     WHEN 2 THEN '2nd ' 
     WHEN 3 THEN '3rd ' 
     WHEN 4 THEN '4th ' 
     WHEN 5 THEN '5th ' END + DATENAME(dw, @date) + ' of the month' 

SQLFiddle

相關問題