如何使用TSQL获得今年的最后一个星期日?

时间:2018-05-10 12:30:22

标签: sql sql-server database tsql

我需要检查某一天是否是任何一年的最后一个星期日,如果是,则返回1仅使用TSQL。

我对TSQL没什么了解,所以任何帮助人员?

5 个答案:

答案 0 :(得分:2)

SQL Server在工作日出现问题,因为它们可能会受到国际化设置的影响。假设有默认值,您可以执行以下操作:

select dateadd(day,
               1 - datepart(weekday, datefromparts(@year, 12, 31)),
               datefromparts(@year, 12, 31)
              )

否则,您需要执行case表达式才能将星期几转换为数字。

在较旧版本的SQL Server中,您可以执行以下操作:

select dateadd(day,
               1 - datepart(weekday, cast(@year + '0101' as date)),
               cast(@year + '0101' as date)
              )

答案 1 :(得分:1)

我没有专门使用tsql,但如果我的sql知识和谷歌搜索足够好,那么像这样的东西应该可以解决这个问题:

... WHERE DATEPART(dw, date) = 7 and DATEDIFF (d, date, DATEFROMPARTS (DATEPART(yyyy, date), 12, 31)) <= 6

基本上我们检查那天是否是星期天,然后是否距离一年的最后一天不到一周

答案 2 :(得分:0)

使用Gordon先生的查询,如果给定日期是一年的最后一个星期日,则 IIF()返回1,如果不是,则返回0。

2018 用作,将 2018-12-30 用作给定日期。您可以使用变量替换值。

select IIF( DATEDIFF(DAY,'2018-12-30',
              DATEADD(day,
              1 - datepart(weekday, datefromparts(2018, 12, 31)),
              datefromparts(2018, 12, 31)
                   )) = 0, 1, 0)

答案 3 :(得分:0)

您可以使用此功能

功能代码:

    create FUNCTION CheckIsSaturday 
(
    @date DATETIME
)
RETURNS int
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result INT
    DECLARE @DayOfWeek NVARCHAR(22)
    DECLARE @LastDayOfYear DATETIME
    select @LastDayOfYear=DATEADD(yy, DATEDIFF(yy, 0, @date) + 1, -1)
    SELECT @DayOfWeek=DATENAME(dw, @date)
    IF(@DayOfWeek='Saturday' AND DATEDIFF(dd,@date,@LastDayOfYear)<7)
        RETURN 1;
    RETURN 0; 

END
GO

功能用法:

SELECT dbo.CheckIsSaturday('2017-12-23')

答案 4 :(得分:0)

如果您有Calendar Table

,这将变得非常简单
DECLARE @CheckDate DATE = '20181230'

;WITH cteGetDates AS 
(
    SELECT
         [Date], WeekDayName, WeekOfMonth, [MonthName], [Year]
        ,LastDOWInMonth = ROW_NUMBER() OVER 
        (
            PARTITION BY FirstDayOfMonth, [Weekday] 
            ORDER BY [Date] DESC
        )
    FROM
        dbo.DateDimension
)
SELECT * FROM cteGetDates D
WHERE D.LastDOWInMonth = 1 AND D.WeekDayName = 'Sunday' and D.MonthName = 'December' AND D.[Date] = @CheckDate