viernes, 5 de septiembre de 2014

Obtener el año, mes o día en Oracle

Para manipular las fechas en la base de datos Oracle se cuenta con  dos funciones que son TO_CHAR, TO_DATE, ¿como  trabajar con  cada una.?
La función TO_CHAR  recibe dos parámetros el primero tiene que ser de tipo date y el segundo una cadena que indica el formato de salida de la fecha.

Para obtener el año seria.


SELECT TO_CHAR(SYSDATE,’YYYY’) FROM DUAL;

Para obtener el mes.

SELECT  TO_CHAR(SYSDATE,’MM’) FROM DUAL;


Finalmente el día


SELECT  TO_CHAR(SYSDATE,’DD’) FROM DUAL;.
Los parámetros completos de la función to_char seria

TO_CHAR( value, [ format_mask ], [ nls_language ] )

La función TO_DATE nos recibe dos parámetros igualmente necesarios para poder darle formato a la  cadena,  pero en este caso en particular tendríamos que pasar una cadena que correspondería a la fecha  como se presentaría a continuación y el formato resultante seria un valor de tipo date.
Para obtener el año seria.

SELECT TO_DATE(‘2013/11/02’,’YYYY’) FROM DUAL ;
Para obtener el mes.


SELECT  TO_DATE(‘2013/11/02’’MM’) FROM DUAL;

Finalmente el dia
 

SELECT  TO_DATE(‘2013/11/02’,’DD’) FROM DUAL;
Los parámetros completos de la función seria

TO_DATE( STRING1, [ FORMAT_MASK ], [ NLS_LANGUAGE ] )

Tambíen se pueden obtener los datos que deseemos juntos usando las mismas sentencias, pero cambiando la mascara de  la selección.
 

 SELECT  TO_DATE(‘2013/11/02’,’MM/YYYY’) FROM DUAL;
  SELECT  TO_CHAR(SYSDATE,’MM/YYYY’) FROM DUAL;

Para obtener los datos en texto, en el siguiente ejemplo el resultado es Marzo.

 select to_char(to_date(to_char(03),'mm'),'Month') from dual;

En el caso de que la aplicación que accede a Oracle no esté indicando que la sesión se establece con los valores de internacionalización (NLS) correspondientes a España, obtendríamos "March" (siguiendo con el ejemplo). Para obtener "Marzo" habría que indicar la variable NLS correspondiente en la propia expresión TO_CHAR:

select to_char(to_date(to_char(03),'mm'),'Month','NLS_DATE_LANGUAGE = SPANISH') from dual; 


Por supuesto, como ya sabéis, la expresión TO_CHAR para obtener el nombre del mes se puede usar dentro de código PL/SQL:

declare
  mesn number(2);
  mesc varchar(20);
begin
  mesn:=3;
  mesc:=to_char(to_date(to_char(mesn),'mm'),'Month','NLS_DATE_LANGUAGE = SPANISH');
  dbms_output.put_line('El mes '||to_char(mesn)||' es '||mesc);
end;
/

Una forma de obtener el valor numérico de alguno de los componentes de la fecha (dia, mes, año, etc) es usando la función EXTRACT:
 
select extract(day from sysdate) dia, extract(month from sysdate) mes, extract(year from sysdate) anio from dual;

       DIA        MES       ANIO
---------- ---------- ----------
         5         10       2010



Fuentes. 
http://www.ingenieroweb.com.co/como-obtener-el-a%C3%B1o-mes-o-d%C3%AD-en-oracle
 http://www.um.es/atica/sql---formatos-de-fecha-1

No hay comentarios:

Publicar un comentario