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

时间:2012-03-05 16:19:10

标签: sql-server-2008

鉴于datetime,我们可以知道它恰好是SaturdaySunday

非常感谢任何想法和建议!

7 个答案:

答案 0 :(得分:72)

许多方法可以使用DATENAME并检查实际的字符串'Saturday'或'Sunday'

SELECT DATENAME(DW, GETDATE())

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

SELECT DATEPART(DW, GETDATE())

答案 1 :(得分:11)

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

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

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

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

IF(@dayName = 'Saturday' OR @dayName = 'Sunday') 
    PRINT 'Weekend';
ELSE
    PRINT 'NOT Weekend';

答案 2 :(得分:6)

答案 3 :(得分:4)

注意:其他答案仅适用于配置英文配置的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;

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

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

答案 4 :(得分:3)

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

SELECT DATENAME(weekday, GETDATE())

答案 5 :(得分:3)

此表达式

SELECT (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7)

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

0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday

独立于@@DATEFIRST

所以周末日就像这样进行测试

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

答案 6 :(得分:1)

好吧,我明白了:

DECLARE @dayName VARCHAR(9), @weekenda VARCHAR(9), @free INT
SET @weekenda =DATENAME(dw,GETDATE())

IF (@weekenda='Saturday' OR @weekenda='Sunday')
SET @free=1
ELSE
SET @free=0

比我使用:..........或free = 1