#sql #oracle
#sql #Oracle
Вопрос:
Предположим, что существует таблица
Emp_id Name Comments
1 Ana Test
2 Dana Test1
3 Fiona Test2
Приведенный ниже запрос извлечет все записи из моей таблицы, и теперь мне также нужно получить дату SysDate 5 рабочих дней (исключая субботы и воскресенья), которой нет в таблице
select emp_id,Name,Comments from Employees
И ожидаемый результат равен
Emp_id Name Comments Date
1 Ana Test 28.10.2016
2 Dana Test1 28.10.2016
3 Fiona Test2 28.10.2016
Мы высоко ценим вашу помощь
Комментарии:
2. @juergend — Ты вообще прочитал вопрос? Речь шла не о добавлении пяти дней, а о добавлении пяти РАБОЧИХ дней. Желание помочь — это нормально, но если вы даже не потратите время на то, чтобы прочитать и понять вопрос, вы мало чем поможете.
Ответ №1:
Формула должна добавить всего 7 дней, если SYSDATE — рабочий день, но она должна добавить только 5 дней, если SYSDATE — воскресенье, и только 6 дней, если SYSDATE — суббота. Это можно сделать с помощью выражения CASE:
... SYSDATE case to_char(SYSDATE, 'Dy') when 'Sun' then 5
when 'Sat' then 6
else 7 end as my_date...
(«Дата» — это зарезервированное слово в Oracle, не используйте его в качестве имени столбца.)
Еще одна вещь — если вам действительно нужна дата (и вам не нужно то же время суток, что и «текущее» время), вы также можете захотеть обернуть все выражение внутри trunc(....)
, чтобы получить только дату с установленным временем 00:00:00
.
Комментарии:
1. Спасибо @mathguy, я случайно проверил и только после того, как вы прокомментировали, я отметил, что результаты запроса неверны, когда дата выпадает на понедельник и пятницу.
2. Ценю вашу помощь
Ответ №2:
select emp_id,Name,Comments,
(SYSDATE case to_char(SYSDATE, 'DY')
when 'Sun' then 5
when 'Sat' then 6
else 7
end) Date
from Employees
Комментарии:
1. Но запрос должен исключать субботы и воскресенья : (
2. @ Annie. Вы отредактировали свой вопрос. Теперь я понял. Я понимаю ваш вопрос