在有条件的情况下,我想检查当天的星期日是否与当地的设置无关,所以我做了:
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。
在西班牙语配置中,上面的代码正在运行。
答案 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'是一个已知的星期日,是一个你不应该改变的常数