Как получить название дня недели из даты?

Учитывая 03/09/1982, как мы можем сказать, какой это день недели. В этом случае это будет Tue.

Можно ли попасть в один запрос?


person user1025901    schedule 04.11.2011    source источник


Ответы (3)


SQL> SELECT TO_CHAR(date '1982-03-09', 'DAY') day FROM dual;

DAY
---------
TUESDAY

SQL> SELECT TO_CHAR(date '1982-03-09', 'DY') day FROM dual;

DAY
---
TUE

SQL> SELECT TO_CHAR(date '1982-03-09', 'Dy') day FROM dual;

DAY
---
Tue

(Обратите внимание, что в запросах используются литералы даты ANSI, которые соответствуют стандарту даты ISO-8601 и избегают двусмысленности формата даты.)

person Zohaib    schedule 04.11.2011
comment
Имейте в виду, что «дд / мм / гггг» в приведенных выше примерах кода нетипично, если вы собираетесь использовать формат даты в США. В США типичный формат даты - «мм / дд / гггг». Неясно, был ли исходный пример даты в марте или в сентябре. - person DWright; 16.12.2014
comment
Нетипичный? @DWright, вы, должно быть, из США и никогда не работали над международными проектами и не слышали о международных стандартах (ISO) - person pablete; 09.04.2015
comment
@pablete, я на самом деле вырос в Европе и знаю о международных вариациях форматирования даты, а также о стандартах ISO. Причина, по которой я сделал этот комментарий, заключается в том, что OP явно использовал формат даты в США, поскольку 9 марта 1982 года было вторником, а 3 сентября 1982 года было пятницей. OP говорит, что это был вторник, поэтому мы знаем, что используется форматирование даты в США. Но Zohaib использует строку формата «дд / мм / гггг», что вызывает потенциальную проблему, если OP использует строку формата Zohaib, поскольку это форматирование не в США. Так что я хотел просто предупредить об этом людей, и особенно ОП. - person DWright; 09.04.2015
comment
Назовите меня сумасшедшим, но я бы добавил и использовал select to_char(date '1982-03-09', 'Day') day from dual;. Понятия не имею, почему люди так любят заглавные буквы, ведь теперь у нас есть подсветка синтаксиса, а заглавные буквы занимают больше места, если не используются шрифты фиксированной ширины. - person Superdooperhero; 13.05.2021

Почти на десять лет поздно до вечеринки, но я думаю, что необходимо улучшить ответ @Zohaib, поскольку его результат зависит от языка клиента. Если вы показываете пользователю название дня недели, это абсолютно нормально, но если ваш код зависит от этого, я бы предпочел контролировать язык следующим образом:

SQL> SELECT TO_CHAR(date '1982-03-09', 'DAY', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---------
TUESDAY

SQL> SELECT TO_CHAR(date '1982-03-09', 'DY', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---
TUE

SQL> SELECT TO_CHAR(date '1982-03-09', 'Dy', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---
Tue
person wolφi    schedule 05.04.2021

Чтобы сделать это для oracle sql, синтаксис будет следующим:

,SUBSTR(col,INSTR(col,'-',1,2)+1) AS new_field

в этом примере я ищу второй '-' и довожу подстроку до конца

person cluelessgumshoe    schedule 04.02.2020