SQL Server SET DATEFIRST область действия - PullRequest
5 голосов
/ 19 мая 2009

Я использую SS 2005, если это

Я видел пример кода как

DECLARE @restore = SELECT @@DATEFIRST
SET DATEFIRST 1
SELECT datepart(dw,ADateTimeColumn) as MondayBasedDate,.... FROM famousShipwrecks --
SET DATEFIRST @restore

Предположим, что при выполнении запроса другой набор запросов DATEFIRST?

Если другой запрос полагается на datefirst, равный 7 (например), и не устанавливает его, и выполняется, когда мой запрос выполняется, то это его проблема, если он не установлен? или есть лучший способ написать запросы, которые зависят от того, какой день является номером 1.

Ответы [ 4 ]

16 голосов
/ 19 мая 2009

@@ DATEFIRST является локальным для вашей сессии. Вы можете проверить это, открыв вкладки в Sql Server Management Studio (SSMS). Выполните этот код на первой вкладке:

 SET DATEFIRST 5

И убедитесь, что это не влияет на другую вкладку:

select @@datefirst

См. Эту статью MSDN .

2 голосов
/ 25 марта 2010

Просто дополнительная точка, если вы хотите избежать установки DATEFIRST, вы можете просто включить значение DATEFIRST в свой запрос, чтобы найти требуемый день как:

    SELECT (datepart(dw,ADateTimeColumn) + @@DATEFIRST) % 7)  as 'MondayBasedDate'
    , ...
    FROM famousShipwrecks --

Тогда вам не нужно беспокоиться о его восстановлении!

0 голосов
/ 20 сентября 2017

Вы можете забыть о DATEPART(weekday, DateColumn) и @@DATEFIRST и вместо этого самостоятельно рассчитать день недели.

Для недели в понедельник (Европа) самое простое:

SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay

Для воскресных недель (Америка) используйте:

SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay

Это прекрасно работает с 1 января соответственно 7-го, 1753 г.

0 голосов
/ 31 июля 2015

Чтобы настроить параметризованный первый день недели, должно работать следующее

DECLARE @FirstDayOfWeek INT = 1;
DECLARE @DateTime DATETIME = '2015-07-14 8:00:00';
SELECT (DATEPART(weekday, @DateTime) + @@DateFirst - @FirstDayOfWeek - 1) % 7 + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...