Как проверить, является ли datetime субботой или воскресеньем в SQL Server 2008 - PullRequest
39 голосов
/ 05 марта 2012

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

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

Ответы [ 7 ]

76 голосов
/ 05 марта 2012

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

SELECT DATENAME(DW, GETDATE())

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

SELECT DATEPART(DW, GETDATE())
12 голосов
/ 28 октября 2014
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';
6 голосов
/ 05 марта 2012

SELECT DATENAME(weekday, GetDate())

Проверьте это для сервера sql: http://msdn.microsoft.com/en-US/library/ms174395(v=sql.90).aspx Проверьте это для .net: http://msdn.microsoft.com/en-us/library/bb762911.aspx

4 голосов
/ 20 ноября 2016

Внимание: Другие ответы работают только на серверах SQL с английской конфигурацией!Используйте 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
3 голосов
/ 21 марта 2018

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

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
3 голосов
/ 05 марта 2012

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

SELECT DATENAME(weekday, GETDATE())
1 голос
/ 04 марта 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...