如何检查SQL Server 2008中的datetime恰好是星期六或星期日

Sai*_*and 42 sql-server-2008

鉴于datetime,有没有一种方法我们可以知道它恰好是一个Saturday或多个Sunday.

任何想法和建议表示赞赏!

msm*_*527 81

有很多方法,您可以使用DATENAME并检查实际字符串'Saturday'或'Sunday'

SELECT DATENAME(DW, GETDATE())
Run Code Online (Sandbox Code Playgroud)

或者使用星期几并检查1(星期日)或7(星期六)

SELECT DATEPART(DW, GETDATE())
Run Code Online (Sandbox Code Playgroud)

  • 小心因为@@ DATEFIRST(见下面的答案)https://msdn.microsoft.com/de-de/library/ms181598.aspx (7认同)
  • 注意:请使用“ SET DATEFIRST 7”来确保此功能在美国系统之外有效! (2认同)
  • 请注意,“SET DATEFIRST”在表视图函数中不起作用 - 在这种情况下使用 Thanasis 的答案 /sf/answers/3458638501/ (2认同)

Chi*_*rag 13

DECLARE @dayNumber INT;
SET @dayNumber = DATEPART(DW, GETDATE());

--Sunday = 1, Saturday = 7.
IF(@dayNumber = 1 OR @dayNumber = 7) 
    PRINT 'Weekend';
ELSE
    PRINT 'NOT Weekend';
Run Code Online (Sandbox Code Playgroud)

这可能会生成错误的结果,因为工作日datepart生成的数字取决于SET DATEFIRST设置的值.这设定了一周的第一天.另一种方式是:

DECLARE @dayName VARCHAR(9);
SET @dayName = DATEName(DW, GETDATE());

IF(@dayName = 'Saturday' OR @dayName = 'Sunday') 
    PRINT 'Weekend';
ELSE
    PRINT 'NOT Weekend';
Run Code Online (Sandbox Code Playgroud)


Ari*_*ion 5

这将为您提供当天的名称:

SELECT DATENAME(weekday, GETDATE())
Run Code Online (Sandbox Code Playgroud)


Pet*_*ert 5

注意:其他答案仅适用于英语配置的SQL Server!使用SET DATEFIRST 7保证DATEPART(DW, ...)收益1日和7星期六。

这是一个独立于本地设置的版本,不需要使用:

CREATE FUNCTION [dbo].[fct_IsDateWeekend] ( @date DATETIME )
RETURNS BIT
AS
BEGIN
    RETURN CASE WHEN DATEPART(DW, @date + @@DATEFIRST - 1) > 5  THEN 1 ELSE 0 END;
END;
Run Code Online (Sandbox Code Playgroud)

如果您不想使用该函数,只需在SELECT语句中使用此函数:

CASE WHEN DATEPART(DW, YourDateTime + @@DATEFIRST - 1) > 5  THEN 'Weekend' ELSE 'Weekday' END
Run Code Online (Sandbox Code Playgroud)


Tha*_*dis 5

这个表达

SELECT (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7)
Run Code Online (Sandbox Code Playgroud)

将始终返回0到6之间的数字,其中

0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday
Run Code Online (Sandbox Code Playgroud)

独立于 @@DATEFIRST

所以像这样测试一个周末

SELECT (CASE
           WHEN (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7) IN (0,6)
           THEN 1
           ELSE 0
       END) AS is_weekend_day
Run Code Online (Sandbox Code Playgroud)