Подтвердить что ты не робот

Как проверить, является ли дата-время субботой или воскресеньем в SQL Server 2008

Учитывая datetime, существует ли способ, которым мы можем знать, что это Saturday или Sunday.

Любые идеи и предложения приветствуются!

4b9b3361

Ответ 1

Многие способы сделать это, вы можете использовать DATENAME и проверить фактические строки "суббота" или "воскресенье"

SELECT DATENAME(DW, GETDATE())

Или используйте день недели и отметьте 1 (воскресенье) или 7 (субботу)

SELECT DATEPART(DW, GETDATE())

Ответ 2

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

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

Это может привести к неправильным результатам, поскольку число, созданное в день недели, зависит от значения, заданного SET DATEFIRST. Это устанавливает первый день недели. Таким образом, другой способ:

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

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

Ответ 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

Ответ 5

Это даст вам имя дня:

SELECT DATENAME(weekday, GETDATE())

Ответ 6

Это выражение

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

Ответ 7

хорошо, я понял:

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

чем я пользуюсь:.......... или бесплатно = 1