Я работал над Oracle APEX, написав запрос, который дает список предстоящих дней рождения студентов в 2016 году и упорядочивает их в хронологическом порядке. Это сработало, и я использовал следующий код:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
Это дало правильный результат и начало показывать имена с хронологически упорядоченными днями рождения в 2016 году.
Однако теперь я хотел получить еще один столбец, показывающий, в какой день ученики празднуют свой день рождения в классе. Таким образом, для учащихся, день рождения которых приходится на будний день, это будет тот же день, а для учащихся, у которых день рождения приходится на выходные, это будет понедельник, используя оператор case, чтобы изменить «субботу» или «воскресенье» на «понедельник».
Я уже сделал запрос, который показывает, в какой день отмечается день рождения студента, который дает правильный вывод, например, «пятница» или «среда», код:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday, to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day') AS celebrationday
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
Я уже сделал несколько простых тестов с оператором case, например добавил что-то, когда имя «Джон», например:
SELECT student_number, first_name,
(CASE first_name
WHEN 'John' THEN 'Check'
END) addition
FROM Students
Что привело к правильному выводу; для всех имен, кроме «Джон», столбец дополнение будет нулевым, а для тех, у кого есть имя, в столбце дополнение будет указано «Проверить».
Теперь начинается основная проблема, когда я пытаюсь воспроизвести это, чтобы проверить, приходится ли праздникдень на выходные, я либо получаю следующую ошибку: 'ORA-00904 'праздникдень': неверный идентификатор ' для этого фрагмента кода:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday, to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day') AS celebrationday,
(CASE celebrationday
WHEN 'saturday' THEN 'monday'
WHEN 'sunday' THEN 'monday'
END) addition
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
(Небольшой комментарий, я знаю, что кейс должен также содержать другие дни недели, но сначала я заинтересован в том, чтобы получить правильный вывод из выходных дней)
Или для следующего фрагмента кода я просто не получаю никаких результатов в столбце дополнение, только нулевые значения.
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday,
CASE to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day)
WHEN 'saturday' THEN 'monday'
WHEN 'sunday' THEN 'monday'
END) addition
FROM Students
WHERE date_of_birth IS NOT NULL
ORDER BY date_of_birth
- Что мне нужно сделать, чтобы заставить работать заявление о случае, чтобы я мог изменить праздничный день? Я надеюсь, что предоставленные примеры кода достаточно ясны для работы и дадут вам представление о том, что работает, а что нет.