Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:检查当前日期是否为星期日_Sql Server_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

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

Sql server SQL Server:检查当前日期是否为星期日,sql-server,sql-server-2008,sql-server-2008-r2,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 @

在有条件的情况下,我想检查当前日期是否为周日,与本地设置无关,因此我已完成:

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


在西班牙语配置中,上述代码正在工作。

以下是一种方法:

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
当然,如果不想将其设置回原始值,只需将其设置为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
声明@i int=1
而@i<8
开始
设置日期优先@i;
当(DATEPART(工作日,'2017-08-27')+@@DATEFIRST-1)=7,然后1,否则0结束时选择大小写
设置@i=@i+1
结束

每次返回1

选择任何周日,例如
20170910
,然后计算该周日与需要检查的日期之间的天数差。 如果模7的结果为0,则有一个星期天

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

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

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”是一个已知的星期日,是一个不应更改的常量,您可以在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

我的机器有默认的US设置,它返回1=星期天选择getdate(),DATENAME(dw,getdate()+3),DATEPART(dw,getdate()+3)输出-2017-08-31 16:33:46.633星期日1
我需要有人确认这在任何本地设置下都能工作这没有多大意义。您需要在一个区域设置下操作,那么我如何使其独立于本地设置工作?您可以使用SET DATEFIRST 7命令将星期日设置为每周的第一天,无论您的sql Server的区域设置如何,您都可以使用DateName函数检查日期。是否有任何方法避免触摸@@DATEFIRST然后返回原始值?是的,我已经编辑了我的答案。然而,我认为GuidoG的答案更好。但在这种情况下,我需要两次约会,我只会有一次,当前的约会date@user1624552
2017-09-10
应该在查询中硬编码,并且永远不会更改。@user1624552您当然可以选择您想要的任何周日,只要您确定它是周日。你可以用18991231来代替20170910,这恰好是一个星期天。啊,好的,对不起,是的,你是对的。这管用!谢谢它独立于当地环境,英语、意大利语、西班牙语。所有语言都可以工作,因为您执行的是基于天数的差异。在其他语言中,星期日可能被称为其他名称。运行此查询“从sys.syslanguages中选择天数”。这取决于您当前的语言,您可以使用select@@language获取该语言。所以,从SysSysLanguage中选择“天”,Name=@语言将在当前语言中获得名称,如果它工作并帮助你,那么考虑给予它一个赞成票。