2015-11-13 26 views
0

我幾乎是編寫SQL查詢的新手。 在SQL Server的上下文中,如何獲取2016年第2個和第4個星期六日期列表 ?如何在SQL Server中獲取第2個和第4個星期六日期列表?

+5

看起來你要我們寫一些代碼給你。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ]和[問]。 –

+0

你怎麼想解決這個具體問題?作業? – jarlh

+0

我們遇到的用例之一 –

回答

4

完成作爲派生表只是爲了顯示邏輯,但如果你喜歡,你可以減少:

select * 
from (
    select d2016, 
      datename(weekday, d2016) as wkdy, 
      row_number() over (partition by datepart(month, d2016), datename(weekday, d2016) order by d2016) as rn_dy_mth 
    from (
     select dateadd(day, rn, cast('2016-01-01' as date)) as d2016 
     from (
      select row_number() over(order by object_id) - 1 as rn 
      from sys.columns 
      ) as rn 
     ) as dy 
    ) as dy_mth 
where rn_dy_mth in (2, 4) 
    and wkdy = 'Saturday' 
order by d2016 
+0

最好的部分是我們可以重複使用這個查詢來獲取任何一年的日期 –

+1

Yer - 我在我的博客上發佈了一個更通用的TVF:http://dataidol.com/ tonyrogerson/2015/11/17 /獲取星期幾的本月日期/月/ –

0
--DEFINE LIMITS FOR DAY 
DECLARE @TODATE DATETIME, @FROMDATE DATETIME 
SET @FROMDATE ='2010-01-01' 
SET @TODATE = '2017-12-31' 

;WITH DATESEQUENCE([DATE]) AS 
(
    SELECT @FROMDATE AS [DATE] 
     UNION ALL 
    SELECT DATEADD(DAY, 1, [DATE]) 
     FROM DATESEQUENCE 
     WHERE DATE < @TODATE 
    ) 
, DATESATURDAY AS 
(SELECT CAST(CAST(YEAR([DATE]) AS VARCHAR)+ 
     (CASE WHEN DATEPART(M,[DATE])<=9 THEN '0'+CAST(DATEPART(M,[DATE]) AS VARCHAR) 
     ELSE CAST(DATEPART(M,[DATE]) AS VARCHAR) END) AS NUMERIC) AS MONTH_ID 

     ,CONVERT(VARCHAR,[DATE],106) AS DAY_DESC 

     ,UPPER(DATENAME(DW,[DATE]))AS DAY_NAME 
FROM DATESEQUENCE) 
,SECOND_FOURTH_SATURDAY AS 
(SELECT * 
,ROW_NUMBER() OVER (PARTITION BY MONTH_ID ORDER BY DAY_NAME) FALL_IN 
FROM DATESATURDAY 
WHERE DAY_NAME='SATURDAY') 
SELECT * FROM SECOND_FOURTH_SATURDAY 
WHERE FALL_IN IN(2,4) 
OPTION (MAXRECURSION 10000) 
+0

雖然您的文章可能會回答這個問題,它不會傷害它解釋它小。 – Thielicious

相關問題