Учитывая datetime
, существует ли способ, которым мы можем знать, что это Saturday
или Sunday
.
Любые идеи и предложения приветствуются!
Учитывая datetime
, существует ли способ, которым мы можем знать, что это Saturday
или Sunday
.
Любые идеи и предложения приветствуются!
Многие способы сделать это, вы можете использовать DATENAME и проверить фактические строки "суббота" или "воскресенье"
SELECT DATENAME(DW, GETDATE())
Или используйте день недели и отметьте 1 (воскресенье) или 7 (субботу)
SELECT DATEPART(DW, GETDATE())
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';
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
Внимание: Другие ответы работают только на 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
Это даст вам имя дня:
SELECT DATENAME(weekday, GETDATE())
Это выражение
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
хорошо, я понял:
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