powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дата в зависимости от дня недели
11 сообщений из 11, страница 1 из 1
Дата в зависимости от дня недели
    #39672490
hawkhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрые люди, помогите плиз(сами мы не местные и далее по тексту...).
Есть в 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 в зависимости от дня недели.
Если что, БОЛЬШОЕ человеческое спасибо.
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39672491
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hawkhawk,

DATEPART
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39672558
hawkhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK, гранд мерси!
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39672668
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKhawkhawk,

DATEPARTИ как же?
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39672670
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapTaPaKhawkhawk,

DATEPARTИ как же?


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

Код: sql
1.
2.
3.
4.
declare @date datetime = getdate()


select dateadd(dd, -datepart(dw, @date), @date)
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673007
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexiapпропущено...
И как же?


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

Код: sql
1.
2.
3.
4.
declare @date datetime = getdate()


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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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);

Что я делаю не так?
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673038
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что не так?
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673046
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapmsLexпропущено...



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

Код: sql
1.
2.
3.
4.
declare @date datetime = getdate()


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


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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);


Что я делаю не так?
По-моему, вы все делаете так.
Не вижу никаких противоречий.
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673088
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если надо найти понедельник от даты, то наверно так:

Код: sql
1.
SELECT DATEADD(wk, DATEDIFF(wk, 0, @DATE), 0)
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673116
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут ещё посмотрите: FAQ
И вот ещё:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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 не зависит
...
Рейтинг: 0 / 0
Дата в зависимости от дня недели
    #39673214
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapВот тут ещё посмотрите: FAQ
И вот ещё:

Как-то так получается
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дата в зависимости от дня недели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]