Установить значение по умолчанию в SQL-запросе

#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
  

Мы высоко ценим вашу помощь

Комментарии:

1. orafaq.com/faq/…

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. Вы отредактировали свой вопрос. Теперь я понял. Я понимаю ваш вопрос