Oracle to_date, от мм / дд / гггг до дд-мм-гггг - PullRequest
6 голосов
/ 09 августа 2011

У меня все даты вставлены в таблицу как varchar2 (10) и отформатированы как «мм / дд / гггг». Что мне нужно, это следующий формат «мм-дд-гггг» и тип данных даты. Моя реализация без PLSQL будет:
</p> <pre><code>select day||'-'||month||'-'||year as formatted_date from (select extract( day from (select to_date('1/21/2000','mm/dd/yyyy') from dual)) as day, to_number(extract( month from (select to_date('1/21/2000','mm/dd/yyyy') from dual)),09) as month, extract( year from (select to_date('1/21/2000','mm/dd/yyyy') from dual)) as year from dual);


Результат: 21-1-2000, а не 21-01-2000, как ожидалось.
При добавлении дополнительного to_date (,) как:

to_date(day||'-'||month||'-'||year,'DD-MM-YYYY') as formatted_date

он даже не меняет поля дня и месяца с помощью eachother.

Ответы [ 3 ]

17 голосов
/ 09 августа 2011

Вам не нужно копаться в извлечении частей даты.Просто приведите его к дате, используя to_date и формат, в котором она хранится, затем приведите эту дату к символу в нужном вам формате.Как это:

select to_char(to_date('1/10/2011','mm/dd/yyyy'),'mm-dd-yyyy') from dual
8 голосов
/ 09 августа 2011

Я предлагаю вам использовать TO_CHAR() при преобразовании в строку. Для этого вам нужно сначала построить дату.

SELECT TO_CHAR(TO_DATE(DAY||'-'||MONTH||'-'||YEAR, 'dd-mm-yyyy'), 'dd-mm-yyyy') AS FORMATTED_DATE
FROM
    (SELECT EXTRACT( DAY FROM
        (SELECT TO_DATE('1/21/2000', 'mm/dd/yyyy')
        FROM DUAL
        )) AS DAY, TO_NUMBER(EXTRACT( MONTH FROM
        (SELECT TO_DATE('1/21/2000', 'mm/dd/yyyy') FROM DUAL
        )), 09) AS MONTH, EXTRACT(YEAR FROM
        (SELECT TO_DATE('1/21/2000', 'mm/dd/yyyy') FROM DUAL
        )) AS YEAR
    FROM DUAL
    );
0 голосов
/ 14 декабря 2016
select to_char(to_date('1/21/2000','mm/dd/yyyy'),'dd-mm-yyyy') from dual
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...