Что может быть не так?
Ваш запрос почти правильный; однако to_char(hire_date, 'DAY')
возвращает строку фиксированной длины с 9 символами (поскольку это длина самого длинного имени дня WEDNESDAY
, когда используется английский язык sh), а более короткие дни заполняются справа пробелами.
Просто добавьте правую клавишу дня, чтобы в ней было 9 символов:
SELECT first_name,
CASE
WHEN to_char(hire_date, 'DAY') = 'FRIDAY '
THEN hire_date
ELSE next_day(hire_date, 'FRIDAY')
END as next_friday,
hire_date,
'"'||to_char(hire_date, 'DAY')||'"' AS day
FROM employees;
Итак, для тестовых данных:
CREATE TABLE employees( first_name, hire_date ) AS
SELECT 'Alice', DATE '2020-03-09' FROM DUAL UNION ALL
SELECT 'Bob', DATE '2020-03-10' FROM DUAL UNION ALL
SELECT 'Carol', DATE '2020-03-11' FROM DUAL UNION ALL
SELECT 'David', DATE '2020-03-12' FROM DUAL UNION ALL
SELECT 'Emma', DATE '2020-03-13' FROM DUAL UNION ALL
SELECT 'Fred', DATE '2020-03-14' FROM DUAL UNION ALL
SELECT 'Gemma', DATE '2020-03-15' FROM DUAL;
Это выводит:
FIRST_NAME | NEXT_FRIDAY | HIRE_DATE | DAY
:--------- | :---------- | :-------- | :----------
Alice | 13-MAR-20 | 09-MAR-20 | "MONDAY "
Bob | 13-MAR-20 | 10-MAR-20 | "TUESDAY "
Carol | 13-MAR-20 | 11-MAR-20 | "WEDNESDAY"
David | 13-MAR-20 | 12-MAR-20 | "THURSDAY "
Emma | 13-MAR-20 | 13-MAR-20 | "FRIDAY "
Fred | 20-MAR-20 | 14-MAR-20 | "SATURDAY "
Gemma | 20-MAR-20 | 15-MAR-20 | "SUNDAY "
дБ <> скрипка здесь