SQL Server:检查当前是否为星期日

时间:2017-08-31 10:55:50

标签: sql-server sql-server-2008 sql-server-2008-r2

在有条件的情况下,我想检查当天的星期日是否与当地的设置无关,所以我做了:

DECLARE @IsSunday BIT

SELECT 
    @IsSunday = CASE  
                   WHEN DATEPART(DW, getdate() + @@DATEFIRST - 1) = 7 
                      THEN 1 
                      ELSE 0 
                END 

IF @IsSunday
BEGIN
  // Do some stuff
END

我需要有人确认我这可以在任何本地设置下工作,例如,具有英语配置和其他语言的SQL Server。

在西班牙语配置中,上面的代码正在运行。

4 个答案:

答案 0 :(得分:2)

您可以在sql server中使用DateName函数。有关更多详细信息,请参阅以下查询。

DECLARE @IsSunday BIT
SELECT @IsSunday = CASE WHEN UPPER(DATENAME(DW, getdate())) = 'SUNDAY' THEN 1 ELSE 0 END 

IF @IsSunday
BEGIN
  // Do some stuff
END

答案 1 :(得分:1)

这是一种方法:

DECLARE @DATEFIRST int = @@DATEFIRST; -- Get the current first day of the week
SET DATEFIRST 7; -- Set the first day of the week to sunday (U.S default)

SELECT  CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 1 THEN -- If the weekday is 1 it's Sunday
            1 
        ELSE 
            0 
        END As IsSunday;

SET DATEFIRST @DATEFIRST; -- set the first day of the week to back it's original value

当然,如果您不想将datefirst设置为原始值,则只需将其设置为7并删除代码的第一行和最后一行即可。

此外,我已经测试了您的原始代码,它似乎工作正常:

DECLARE @i int = 1

WHILE @i < 8
BEGIN

SET DATEFIRST @i;

SELECT CASE WHEN (DATEPART(WEEKDAY, '2017-08-27') + @@DATEFIRST - 1) = 7 THEN 1 ELSE 0 END 


SET @i = @i + 1

END

每次都返回1。

答案 2 :(得分:1)

选择任何星期日,例如20170910,并计算该星期日与您需要检查的日期之间的天数差异。 如果模7的结果是0,那么你就有一个星期天。

select case when datediff(day, '20170910', getdate()) % 7 = 0
         then 1
         else 0
       end;

答案 3 :(得分:1)

将您的日期的天数与已知星期日的日期进行比较

declare @IsSunday bit
Declare @yourdate date = '20170820'

select @IsSunday = case when datepart(dw, '20170827') = datepart(dw, @yourdate) 
                     then 1 -- sunday
                     else 0 -- not sunday
                   end

IF @IsSunday
BEGIN
  -- Do some stuff
END

其中'20170827'是一个已知的星期日,是一个你不应该改变的常数