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@user16245522017-09-10
应该在查询中硬编码,并且永远不会更改。@user1624552您当然可以选择您想要的任何周日,只要您确定它是周日。你可以用18991231来代替20170910,这恰好是一个星期天。啊,好的,对不起,是的,你是对的。这管用!谢谢它独立于当地环境,英语、意大利语、西班牙语。所有语言都可以工作,因为您执行的是基于天数的差异。在其他语言中,星期日可能被称为其他名称。运行此查询“从sys.syslanguages中选择天数”。这取决于您当前的语言,您可以使用select@@language获取该语言。所以,从SysSysLanguage中选择“天”,Name=@语言将在当前语言中获得名称,如果它工作并帮助你,那么考虑给予它一个赞成票。