2011-08-09 15 views
6

Tengo todas las fechas insertadas en la tabla como varchar2 (10) y formateadas como 'mm/dd/aaaa'. Lo que necesito es el siguiente formato 'mm-dd-aaaa' y el tipo de datos de fecha. Mi implementación sin PLSQL sería:
Oracle to_date, de mm/dd/aaaa a dd-mm-aaaa

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); 


El resultado es: 21-1-2000 no 21-01-2000 como se esperaba.
Al añadir to_date adicional (,) como:

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

que ni siquiera cambiar los campos día y el mes con unos de otros.

+0

Puede dar formato al código fuente con el botón '{}' barra de herramientas. Por lo general, se ve mejor. –

+3

Realmente debe almacenar las fechas como fechas –

Respuesta

8

le sugiero que utilice TO_CHAR() al convertir a cadena. Para hacer eso, primero necesitas construir una fecha.

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 
    ); 
14

No necesita perder el tiempo extrayendo partes de la fecha. Simplemente transfiéralo a una fecha usando to_date y el formato en el que está almacenado, luego transfiera esa fecha a un char en el formato que desee. De esta manera:

select to_char(to_date('1/10/2011','mm/dd/yyyy'),'mm-dd-yyyy') from dual 
0
select to_char(to_date('1/21/2000','mm/dd/yyyy'),'dd-mm-yyyy') from dual 
+0

Usted está sugiriendo lo mismo que StevieG hizo anteriormente. –