Получить название дня из номера дня недели в оракуле - PullRequest
0 голосов
/ 20 мая 2019

У меня есть строковое представление дня недели (т.е. 1, 2, 3, 4, 5, 6 и 7) в виде поля в таблице.Из них я хочу вывести имя дня (например, понедельник, вторник и т. Д.) С использованием Oracle SQL без использования оператора case.Кто-нибудь с идеей?

Ответы [ 3 ]

1 голос
/ 20 мая 2019

Вы можете сделать что-то вроде следующего:

WITH day_map AS (SELECT TO_CHAR(SYSDATE+LEVEL, 'FMD') id
                      , TO_CHAR(SYSDATE+LEVEL, 'FMDay') name
                   FROM dual
                CONNECT BY LEVEL < 8)
SELECT m.NAME
  FROM <YOUR_TABLE> t
  LEFT JOIN day_map m 
    ON m.id = t.<day_of_week>
1 голос
/ 20 мая 2019

Я думаю, что case может быть самым простым решением:

select (case dow when '1' then 'Monday' when '2' then 'Tuesday' when '3' then 'Wednesday'
                 when '4' then 'Thursday' when '5' then 'Friday' when '6' then 'Saturday'
                 when '7' then 'Sunday'
        end)

Это может быть не так уж и сложно, как преобразование в даты, но вы можете получить именно ту строку, которая вам нужна, без суеты с датойарифметика.

Если вы хотите использовать арифметику даты, используйте trunc():

select to_char(trunc(sysdate, 'IW') + dow - 1, 'Dy')

Примечание: здесь создаются сокращения дня.Используйте 'Day', если хотите указать полное название дня недели.

Усекает текущую дату до начала недели ISO, которая начинается в понедельник.

0 голосов
/ 20 мая 2019

Поскольку 20190106 - воскресенье, вы можете использовать это, заменить 20190106 на любое другое воскресенье:

Но, IMO, вам лучше написать функцию с использованием CASE и вернуть свой результат для повышения производительности

WITH table_name AS
(
    SELECT '1' AS c1 FROM dual UNION ALL
    SELECT '2' AS c1 FROM dual UNION ALL
    SELECT '3' AS c1 FROM dual UNION ALL
    SELECT '6' AS c1 FROM dual 
)
SELECT TO_CHAR(TO_DATE('20190106', 'YYYYMMDD') + c1, 'Day') 
FROM table_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...