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

Откуда: Northern Сapital
Сообщений: 71
Добрые люди, помогите плиз(сами мы не местные и далее по тексту...).
Есть в T-SQL запросике самопального плана обслуживания помимо всего прочего такая строчка:
DECLARE @datetime2 datetime2 = cast(convert(char(8),DATEADD(day, -7, getdate()),112) as datetime)
Дабы было понятно, что к чему, этим значением переменной потом на автопилоте обновляется установка даты редактирования документов 1С(чтобы ручками не править каждый день в базе):
UPDATE [dbo].[_там-парам] SET [_бла-бла] = DATEADD(year, 2000, @datetime2) WHERE [_ширли-мырли] = 0xмногацифорек
Иными словами, каждое утро по плану обслуживания для пользователей 1С обновляется дата редактирования документов задним числом(в нашем случае это неделя, т.е. -7 дней). Теперь главбуня хочет такой расклад: если сегодня понедельник, то дата редактирования - один день(задним числом), если сегодня вторник, то редактировать можно 2 дня(сегодняшние документы и вчерашние понедельниковские), если среда, то - три дня и т.д. В пятницу можно редактировать задним числом все документы этой недели. На след неделе опять всё по новой. Так как языком владею слабо, то прошу посильной помощи у форумчан, как бы мне получить плавающую дату datetime2 в зависимости от дня недели.
Если что, БОЛЬШОЕ человеческое спасибо.
11 июл 18, 12:43    [21561985]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
hawkhawk,

DATEPART
11 июл 18, 12:45    [21561995]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
hawkhawk
Member

Откуда: Northern Сapital
Сообщений: 71
TaPaK, гранд мерси!
11 июл 18, 13:48    [21562369]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
TaPaK
hawkhawk,

DATEPART
И как же?
11 июл 18, 16:35    [21563267]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
msLex
Member

Откуда:
Сообщений: 7726
iap
TaPaK
hawkhawk,

DATEPART
И как же?



что-то типа...

declare @date datetime = getdate()


select dateadd(dd, -datepart(dw, @date), @date)
11 июл 18, 16:46    [21563315]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
msLex
iap
пропущено...
И как же?



что-то типа...

declare @date datetime = getdate()


select dateadd(dd, -datepart(dw, @date), @date)
SET NOCOUNT ON;
declare @date datetime = getdate();
SET DATEFIRST 1;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 2;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 3;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 4;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 5;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 6;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 7;
select dateadd(dd, -datepart(dw, @date), @date);
Что я делаю не так?
12 июл 18, 11:38    [21565484]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
а что не так?
12 июл 18, 12:20    [21565653]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
msLex
Member

Откуда:
Сообщений: 7726
iap
msLex
пропущено...



что-то типа...

declare @date datetime = getdate()


select dateadd(dd, -datepart(dw, @date), @date)

SET NOCOUNT ON;
declare @date datetime = getdate();
SET DATEFIRST 1;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 2;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 3;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 4;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 5;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 6;
select dateadd(dd, -datepart(dw, @date), @date);
SET DATEFIRST 7;
select dateadd(dd, -datepart(dw, @date), @date);

Что я делаю не так?

По-моему, вы все делаете так.
Не вижу никаких противоречий.
12 июл 18, 12:29    [21565684]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2724
если надо найти понедельник от даты, то наверно так:

SELECT DATEADD(wk, DATEDIFF(wk, 0, @DATE), 0)
12 июл 18, 13:01    [21565819]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Вот тут ещё посмотрите: FAQ
И вот ещё:

SELECT
 CASE DATEDIFF(DAY,0,CURRENT_TIMESTAMP)%7
  WHEN 0 THEN 'Понедельник'
  WHEN 1 THEN 'Вторник'
  WHEN 2 THEN 'Среда'
  WHEN 3 THEN 'Четверг'
  WHEN 4 THEN 'Пятница'
  WHEN 5 THEN 'Суббота'
  WHEN 6 THEN 'Воскресенье'
 END;

CASE (@@DATEFIRST+DATEPART(WEEKDAY,CURRENT_TIMESTAMP))%7
 WHEN 2 THEN 'Понедельник'
 WHEN 3 THEN 'Вторник'
 WHEN 4 THEN 'Среда'
 WHEN 5 THEN 'Четверг'
 WHEN 6 THEN 'Пятница'
 WHEN 0 THEN 'Суббота'
 WHEN 1 THEN 'Воскресенье'
END;

Это всё от @@DATEFIRST и @@LANGUAGE не зависит
12 июл 18, 13:30    [21565928]     Ответить | Цитировать Сообщить модератору
 Re: Дата в зависимости от дня недели  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
iap
Вот тут ещё посмотрите: FAQ
И вот ещё:

Как-то так получается
WITH
dd AS (
  SELECT
    [дата] = CONVERT( DATE, '20180702' )
  UNION ALL
  SELECT
    [дата] = DATEADD( DAY, 1, [дата] )
  FROM
    dd
  WHERE
    [дата] < '20180715'
)
SELECT
  [дата],
  [пн] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 6, [дата] ),
  [вт] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 5, [дата] ),
  [ср] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 4, [дата] ),
  [чт] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 3, [дата] ),
  [пт] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 2, [дата] ),
  [сб] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 1, [дата] ),
  [вс] = DATEADD( DAY, ( @@DATEFIRST + 1 - DATEPART( WEEKDAY, [дата] ) ) % 7 - 0, [дата] )
FROM
  dd
12 июл 18, 15:56    [21566377]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить