Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 2008 在SQLServer2008中,如何检查日期时间是星期六还是星期天_Sql Server 2008 - Fatal编程技术网

Sql server 2008 在SQLServer2008中,如何检查日期时间是星期六还是星期天

Sql server 2008 在SQLServer2008中,如何检查日期时间是星期六还是星期天,sql-server-2008,Sql Server 2008,给定一个日期时间,有没有办法知道它恰好是周六或周日 任何想法和建议都将不胜感激 选择日期名称(工作日,GetDate()) 检查sql server的以下内容: 检查.net:这将为您提供当天的名称: SELECT DATENAME(weekday, GETDATE()) 有很多方法可以做到这一点,您可以使用DATENAME并检查实际字符串“Saturday”或“Sunday” SELECT DATENAME(DW, GETDATE()) 或者使用一周中的某一天,检查1(星期日)或7(星期六

给定一个
日期时间
,有没有办法知道它恰好是
周六
周日

任何想法和建议都将不胜感激

选择日期名称(工作日,GetDate())

检查sql server的以下内容:
检查.net:

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

SELECT DATENAME(weekday, GETDATE())

有很多方法可以做到这一点,您可以使用DATENAME并检查实际字符串“Saturday”或“Sunday”

SELECT DATENAME(DW, GETDATE())
或者使用一周中的某一天,检查1(星期日)或7(星期六)

这可能会生成错误的结果,因为工作日datepart生成的数字取决于set DATEFIRST设置的值。这将设置一周的第一天。 因此,另一种方法是:

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

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

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

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

此表达式

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

注意@DATEFIRST(请参见下面的答案)注意:使用
设置DATEFIRST 7
以确保它在美国系统之外工作!请注意,
SET DATEFIRST
在表视图函数中不起作用-在这种情况下使用Thanasis的答案
0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday
SELECT (CASE
           WHEN (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7) IN (0,6)
           THEN 1
           ELSE 0
       END) AS is_weekend_day