Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Повтор каждые 7 дней  [new]
vah
Member

Откуда:
Сообщений: 2694
Скажите пожалуйста, как написать запрос, чтобы каждый день недели обозначелся значением от 1 до 7 (в зависимости от даты)?

Заранее благодарен.
30 июл 12, 11:12    [12933369]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
DATEPART ( datepart , date )

datepart
Часть переменной типа date (значение даты или времени), имеющая значение типа integer. В следующей таблице перечислены все допустимые аргументы datepart. Эквивалентные переменные, определяемые пользователем, являются недопустимыми.

weekday dw
30 июл 12, 11:14    [12933376]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
Glory
Member

Откуда:
Сообщений: 104751
Изучать встроенные функции TSQL для работы с датами.
30 июл 12, 11:14    [12933382]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
vah
Member

Откуда:
Сообщений: 2694
Ой, пардон, туплю ))

weekday
30 июл 12, 11:16    [12933389]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
vah
Ой, пардон, туплю ))

weekday
Будет зависеть от значения @@DATEFIRST и @@LANGUAGE.

Если нужно независимое представление дня недели, например, понедельник - 1, вторник - 2 и т.д.,
то что-то такое:
SELECT DATEDIFF(DAY,0,CURRENT_TIMESTAMP)%7+1;
SELECT (@@DATEFIRST+DATEPART(WEEKDAY,CURRENT_TIMESTAMP))%7-1;
30 июл 12, 11:45    [12933525]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
test0444
Guest
iap,

Когда пишем код (ниже) в хп
SET DATEFIRST 1

После выполения хп, далее начинает использоваться насройка сервера по умолчанию. правильно?
Т.е. это у меня не глобальная настройка первого дня недели?
30 июл 12, 12:47    [12933975]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
test0444
iap,

Когда пишем код (ниже) в хп
SET DATEFIRST 1

После выполения хп, далее начинает использоваться насройка сервера по умолчанию. правильно?
Т.е. это у меня не глобальная настройка первого дня недели?

Откуда таки выводы ?
Оригинал
30 июл 12, 12:52    [12934010]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
test0444
iap,

Когда пишем код (ниже) в хп
SET DATEFIRST 1

После выполения хп, далее начинает использоваться насройка сервера по умолчанию. правильно?
Т.е. это у меня не глобальная настройка первого дня недели?
Нет. Это действует в пределах сессии.
Да и в функцию или представление SET не напишешь.
30 июл 12, 12:53    [12934021]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
test04444
Guest
Ken@t,

Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера.

При использовании внутри хранимой процедуры любые установки SET игнорируются.

http://msdn.microsoft.com/ru-ru/library/ms190356.aspx

Не понятно, две противоположные фразы?
30 июл 12, 12:57    [12934058]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
Glory
Member

Откуда:
Сообщений: 104751
test04444
При использовании внутри хранимой процедуры любые установки SET игнорируются.

Не вырывайте предложение из контекста



Stored procedures execute with the SET settings specified at execute time except for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. Stored procedures specifying SET ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure creation time. If used inside a stored procedure, any SET setting is ignored.

any SET setting is ignored относится к процитированному параграфу, а не ко всем SET-ам
30 июл 12, 13:00    [12934093]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
test04444
Guest
Glory,
Не могу понять хелп. Ниже, когда будет игнорироваться SET и будут использоваться настройки сервера?

CREATE PROC test_p
AS
SET ANSI_NULLS ON

SET DATEFIRST 1

SELECT DATEPART(weekday, GETDATE()) AS WDAY


SET ANSI_NULLS ON
GO
CREATE PROC test_p
AS
SET DATEFIRST 1

SELECT DATEPART(weekday, GETDATE()) AS WDAY
30 июл 12, 13:12    [12934208]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
Glory
Member

Откуда:
Сообщений: 104751
test04444
Ниже, когда будет игнорироваться SET и будут использоваться настройки сервера?

Еще раз
Цитата говорит об игнорировании внутри процедур только двух настроек SET. А не всех, как вы процитировали только из последней части последнего предложения
30 июл 12, 13:19    [12934267]     Ответить | Цитировать Сообщить модератору
 Re: Повтор каждые 7 дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
test04444,

во втором случае и только SET ANSI_NULLS ON,
поскольку именно этот SET запоминается вместе с процедурой в момент создания оной!
SET DATEFIRST отработает локально.
30 июл 12, 13:19    [12934271]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить