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

Откуда:
Сообщений: 158
Помогите получить

Дату и время на вчерашний день плюс со включенными временем (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') , то есть : 05/11/2019 23:59:59. И чтобы показывало только будние дни исключить субботу и воскресенье Если сегодня понедельник чтобы показывало дату и время на пятницу 'DD-MM-YYYY HH24:MI:SS';

Заранее спасибо.
6 ноя 19, 10:32    [22010514]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
Когда уж начнёшь пытаться думать сам?
6 ноя 19, 10:33    [22010517]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1101
А в воскресенье тоже пятницу должно показывать?
6 ноя 19, 10:36    [22010519]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
Oleg M.Ivanov
А в воскресенье тоже пятницу должно показывать?


Ага
6 ноя 19, 10:38    [22010522]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1229
Frequency,

+ offtop
"И взмолился я Господу и случилось чудо! У всех суббота, а у меня еще пятница!"(c) бородатый анекдот
6 ноя 19, 10:48    [22010528]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
AmKad
Member

Откуда:
Сообщений: 5111
Frequency,

Даю наводку. Отталкиваться нужно от
trunc(sysdate, 'iw')
.
6 ноя 19, 10:52    [22010533]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
Oleg M.Ivanov
А в воскресенье тоже пятницу должно показывать?


хотя не принципиально
6 ноя 19, 10:59    [22010543]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Lary Denis
Member

Откуда:
Сообщений: 29
AmKad
Даю наводку


В будни и на водку?
6 ноя 19, 11:08    [22010553]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
AmKad
Member

Откуда:
Сообщений: 5111
Lary Denis
В будни и на водку?
"Немного, зато в валюте." - подумал Штрилиц. ©

Посмотри на него, сколько тем он создал за последние дни, держу пари у него такие будни, что без поллитра не разберешь.
6 ноя 19, 11:16    [22010564]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
AmKad
Frequency,

Даю наводку. Отталкиваться нужно от
trunc(sysdate, 'iw')
.


IW Week of year (1-52 or 1-53) based on the ISO standard.

почему?

....
stax
6 ноя 19, 11:43    [22010613]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Frequency,

влоб case/decode
SQL> ed
Wrote file afiedt.buf

  1  with t as
  2  (select date '2019-11-03' + level d from dual connect by level <11)
  3  select
  4   d
  5   ,to_char(d, 'dy','NLS_DATE_LANGUAGE=RUSSIAN')
  6   ,to_char(d-decode(to_char(d, 'dy','NLS_DATE_LANGUAGE=RUSSIAN'),'пн',2,'вс',1,0)-1/24/60/60
  7           ,'dd.mm.yyyy hh24:mi:ss')
  8* from t
SQL> /

D        TO TO_CHAR(D-DECODE(TO
-------- -- -------------------
04.11.19 пн 01.11.2019 23:59:59
05.11.19 вт 04.11.2019 23:59:59
06.11.19 ср 05.11.2019 23:59:59
07.11.19 чт 06.11.2019 23:59:59
08.11.19 пт 07.11.2019 23:59:59
09.11.19 сб 08.11.2019 23:59:59
10.11.19 вс 08.11.2019 23:59:59
11.11.19 пн 08.11.2019 23:59:59
12.11.19 вт 11.11.2019 23:59:59
13.11.19 ср 12.11.2019 23:59:59

10 rows selected.



....
stax
6 ноя 19, 11:53    [22010627]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52744
Oleg M.Ivanov
А в воскресенье тоже пятницу должно показывать?
а если в пятницу Новый год
6 ноя 19, 12:12    [22010651]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
123йй
Member

Откуда:
Сообщений: 1563
andreymx
а если в пятницу Новый год

"каждую пятницу я в ..." (с) Слепаков
6 ноя 19, 12:43    [22010675]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
Elic
Когда уж начнёшь пытаться думать сам?


Я сам подбираю несколько вариантов. Пишу сюда может кто предложит лучше.
6 ноя 19, 13:01    [22010685]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
Stax
Frequency,

влоб case/decode
SQL> ed
Wrote file afiedt.buf

  1  with t as
  2  (select date '2019-11-03' + level d from dual connect by level <11)
  3  select
  4   d
  5   ,to_char(d, 'dy','NLS_DATE_LANGUAGE=RUSSIAN')
  6   ,to_char(d-decode(to_char(d, 'dy','NLS_DATE_LANGUAGE=RUSSIAN'),'пн',2,'вс',1,0)-1/24/60/60
  7           ,'dd.mm.yyyy hh24:mi:ss')
  8* from t
SQL> /

D        TO TO_CHAR(D-DECODE(TO
-------- -- -------------------
04.11.19 пн 01.11.2019 23:59:59
05.11.19 вт 04.11.2019 23:59:59
06.11.19 ср 05.11.2019 23:59:59
07.11.19 чт 06.11.2019 23:59:59
08.11.19 пт 07.11.2019 23:59:59
09.11.19 сб 08.11.2019 23:59:59
10.11.19 вс 08.11.2019 23:59:59
11.11.19 пн 08.11.2019 23:59:59
12.11.19 вт 11.11.2019 23:59:59
13.11.19 ср 12.11.2019 23:59:59

10 rows selected.



....
stax


Спасибо , помогли немного доработал то что мне нужно было из вашего скрипта

SELECT CASE WHEN TO_CHAR(TO_DATE(SYSDATE , 'DD/MM/YYYY' ), 'DY') = 'MON' 
            THEN TRUNC(SYSDATE) - 2 - 1/24/60/60 
            ELSE  TRUNC(SYSDATE) - INTERVAL '1' SECOND END DT , SYSDATE  FROM DUAL ;
6 ноя 19, 13:02    [22010688]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
Stax,

Спасибо за воскресенье тоже, тоже включу в код
6 ноя 19, 13:04    [22010690]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
123йй
Member

Откуда:
Сообщений: 1563
Frequency

Спасибо , помогли немного доработал то что мне нужно было из вашего скрипта

SELECT CASE WHEN TO_CHAR(TO_DATE(SYSDATE , 'DD/MM/YYYY' ), 'DY') = 'MON' 
            THEN TRUNC(SYSDATE) - 2 - 1/24/60/60 
            ELSE  TRUNC(SYSDATE) - INTERVAL '1' SECOND END DT , SYSDATE  FROM DUAL ;

Ну ну.
6 ноя 19, 13:07    [22010692]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Frequency
Member

Откуда:
Сообщений: 158
123йй
Frequency

Спасибо , помогли немного доработал то что мне нужно было из вашего скрипта

SELECT CASE WHEN TO_CHAR(TO_DATE(SYSDATE , 'DD/MM/YYYY' ), 'DY') = 'MON' 
            THEN TRUNC(SYSDATE) - 2 - 1/24/60/60 
            ELSE  TRUNC(SYSDATE) - INTERVAL '1' SECOND END DT , SYSDATE  FROM DUAL ;

Ну ну.


Да спасибо

TO_CHAR(SYSDATE , 'DY') 
6 ноя 19, 13:11    [22010698]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
-2-
Member

Откуда:
Сообщений: 14994
Stax
AmKad
trunc(sysdate, 'iw')
почему?
Потому что меньше провоцирует криворуких:
Frequency
TO_CHAR(SYSDATE , 'DY') 
6 ноя 19, 13:15    [22010701]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
-2-
Stax
пропущено...
почему?
Потому что меньше провоцирует криворуких:
Frequency
TO_CHAR(SYSDATE , 'DY') 


чтото не сображу (туплю/на ручнике)
как по iw определить суботу/воскрксенье?

....
stax
6 ноя 19, 14:26    [22010761]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Frequency

... 'DY') = 'MON'
[/src]


для 'MON' я б явно прописывал nls (хотя в доке встречаются примеры без nls)

.....
stax
6 ноя 19, 14:29    [22010767]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
Stax
чтото не сображу (туплю/на ручнике)
как по iw определить суботу/воскрксенье?
Надо почаще читать форум.
Что получится, если от даты отнять ближайший к ней понедельник?
6 ноя 19, 14:37    [22010778]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Elic
Stax
чтото не сображу (туплю/на ручнике)
как по iw определить суботу/воскрксенье?
Надо почаще читать форум.
Что получится, если от даты отнять ближайший к ней понедельник?

спасибо (вспомнил, вернее невнимательный был, в примере trunc, а я зациклился на to_char)

имхо, с decode/case удобнее для сопровождения

....
stax
6 ноя 19, 14:43    [22010791]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
Stax
имхо, с decode/case удобнее для сопровождения
Слишком "хо".
6 ноя 19, 14:54    [22010806]     Ответить | Цитировать Сообщить модератору
 Re: Предыдущий SYSDATE на будние дни  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6829
КМК,
Без календаря выходных дней, это сферический конь в вакууме, либо упражнение для студентов.
Любой праздник, и потребуется ручная правка...
6 ноя 19, 16:26    [22010901]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить