Форматирование даты в Oracle для отображения месяца и дня - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть дата, как показано ниже

SELECT TO_CHAR(SYSDATE, 'DDD') FROM dual;

результат для вышеуказанного запроса: 117

Мне нужно конвертировать 117 в месяц и день . кто-нибудь знает, как это сделать в PL SQL

ожидаемый результат 04-27

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Если у вас есть «117» и вы хотите преобразовать его в дату, вам придется использовать немного (но на самом деле - просто немного) арифметики. Поскольку «DDD» представляет количество дней с 1-го числа текущего года, добавьте его к ... ну 1-го числа текущего года и примените соответствующую маску формата, чтобы преобразовать ее в дату. Я вычел "1", как вы хотите получить вчера .

Например:

SQL> select to_char(sysdate, 'ddd') from dual;

TO_
---
117

SQL> select to_date(trunc(sysdate, 'yyyy') + 117, 'dd.mm.rrrr') - 1 resul
  2  from dual;

RESULT
----------
27.04.2018

SQL>

Или, используя указанный вами формат (MM-DD):

SQL> select to_char(trunc(sysdate, 'yyyy') + 117 - 1, 'mm-dd') result
  2  from dual;

RESUL
-----
04-27

SQL>
0 голосов
/ 27 апреля 2018

Изменить 'DDD' на 'MM-DD'.

Попробуйте это:

SELECT TO_CHAR(SYSDATE, 'MM-DD') 
FROM dual;

ВЫВОД:

04-27

Демо:

http://sqlfiddle.com/#!4/622055/7

РЕДАКТИРОВАНИЕ:

DDD показывает количество дней с первого года.

Например:

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD'), 'DDD') 
FROM dual;

дает вывод 001, поскольку это первый день года 2018.

Итак, чтобы сломать 117, вам нужен год. Тогда вы можете использовать этот запрос.

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD') + column_name - 1, 'MM-DD') 
FROM dual;

Пример запроса:

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD') + 117 - 1, 'MM-DD')
FROM dual;

ВЫВОД:

04-27

Демо:

http://sqlfiddle.com/#!4/622055/37

...