Oracle to_date,从mm/dd/yyyy到dd-mm-yyyy

ref*_*rer 6 oracle

我将所有日期作为varchar2(10)插入表格并格式化为'mm/dd/yyyy'.我需要的是以下格式'mm-dd-yyyy'和日期数据类型.我没有PLSQL的实现是:

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);
Run Code Online (Sandbox Code Playgroud)


结果是:21-1-2000不是21-01-2000如预期的那样.
添加额外的to_date(,)时:

to_date(day||'-'||month||'-'||year,'DD-MM-YYYY') as formatted_date
Run Code Online (Sandbox Code Playgroud)

它甚至不会与彼此改变日期和月份字段.

Ste*_*ieG 17

你不需要提取部分日期.只需使用to_date及其存储的格式将其转换为日期,然后以您想要的格式将该日期转换为char.像这样:

select to_char(to_date('1/10/2011','mm/dd/yyyy'),'mm-dd-yyyy') from dual
Run Code Online (Sandbox Code Playgroud)


Álv*_*lez 8

我建议你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
    );
Run Code Online (Sandbox Code Playgroud)