简体   繁体   English

如何在 SQL Server 中获取第 2 个和第 4 个星期六的日期列表?

[英]How to get list of 2nd and 4th Saturday dates in SQL Server?

I am almost a newbie to writing SQL queries.我几乎是编写 SQL 查询的新手。 In the context of SQL Server, how to get list of 2nd and 4th Saturday dates in the year 2016?在 SQL Server 的上下文中,如何获取 2016 年第 2 个和第 4 个星期六日期的列表?

Done as a derived table simply to show the logic but you can reduce if you prefer:作为派生表完成只是为了显示逻辑,但如果您愿意,可以减少:

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
--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)

You can get any Saturday of a month using the Following Query in SQL.您可以使用 SQL 中的以下查询获得一个月中的任何一个星期六。 Here I'm Getting on Current Date, You can set your own selected date to get a Specific month Saturday在这里,我正在获取当前日期,您可以设置自己选择的日期以获得特定月份的星期六

select DATEADD(dd, (14 - @@DATEFIRST - DATEPART(dw, DATEADD(MONTH, DATEDIFF(mm, 0,getdate()), 0))) % 7, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0)) as FirstSaturday,
DATEADD(dd,7,DATEADD(dd, (14 - @@DATEFIRST - DATEPART(dw, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) % 7, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) as SecondSaturday,
DATEADD(dd,14,DATEADD(dd, (14 - @@DATEFIRST - DATEPART(dw, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) % 7, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) as ThirdSaturday,
DATEADD(dd,21,DATEADD(dd, (14 - @@DATEFIRST - DATEPART(dw, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) % 7, DATEADD(MONTH, DATEDIFF(mm, 0, getdate()), 0))) as LastSaturday

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL Server挑战性问题-寻找第一买家,第二/第三买家,第四或更多买家 - SQL Server Challenging questions - look for 1st buyer, 2nd/3rd buyers, 4th or more buyers 在一行中查找第 2、3、4、5 个非 NULL 值(SQL) - finding 2nd, 3rd, 4th, 5th not NULL values in a row (SQL) 每月第 2 和第 4 个星期四运行的重复 SQL 作业 - Reoccurring SQL job to run on the 2nd and 4th Thursday of every month 如何格式化文件名中第二个和第四个下划线之间的值? - How can I format value between 2nd and 4th underscore in the file name? 如何在Oracle表的varchar列中的第2个和第4个char之后插入“/” - How to Insert '/' after 2nd and 4th char in varchar column of an Oracle table 在SQL Server中,如何选择第4行? - In SQL Server, how to pick top 4th row? 使用ROW_NUMBER()将第1个ARRAY与第2个,第3个,第4个等进行比较 - Using ROW_NUMBER () to Compare 1st ARRAY to 2nd, 3rd, 4th, etc 根据特定材料,从同一列中选择第二,第四行等 - Select every 2nd, 4th row and so on from same column based on specific material 如何从需要在单个查询中首先添加到sql server中的表中获得第二高的表? - How to get the 2nd highest from a table where it need to be added first in sql server in a single query? 如何创建一个 sql 查询获取表中的第 2 个到最大结果? - How to create a sql query get the 2nd to Max result in table?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM