Fechas: funciones y tipos en Oracle

Fechas: funciones y tipos en Oracle

TIPOS DE DATOS DE FECHAS

DATE
Rango desde 01/01/4712 AC hasta 31/12/9999 DC.
El tamaño es de 7 bytes.
El formato lo determina de manera implicita el parámetro NLS_TERRITORY y explicitamente el parámetro NLS_DATE_FORMAT
No contempla las fracciones de segundo ni la zona horaria.

TIMESTAMP [(fracciones_de_segundos)]
Admite fracciones de 0 a 9 dígitos, aunque por defecto son 6.
Dependiendo de la precisión el tamaño varía de 7 a 11 bytes.
El formato lo determina de manera implicita el parámetro NLS_TERRITORY y explicitamente el parámetro NLS_DATE_FORMAT
Contempla fracciones de segundo, pero no zona horaria.

TIMESTAMP [(fractional_seconds)] WITH TIME ZONE
Admite fracciones de 0 a 9 dígitos, aunque por defecto son 6.
El tamaño es fijo de 13 bytes
Contempla fracciones de segundo y zona horaria.

TIMESTAMP [(fractional_seconds)] WITH LOCAL TIME ZONE
Tiene una serie de consideraciones:
– La información es normalizada a la zona horaria cuando se guara en la base de datos
– Cuando la información es pedida a la base de datos es transformada a la zona horaria de la sesión

Admite fracciones de 0 a 9 dígitos, aunque por defecto son 6.
Dependiendo de la precisión el tamaño varía de 7 a 11 bytes.
El formato lo determina de manera implicita el parámetro NLS_TERRITORY y explicitamente el parámetro NLS_DATE_FORMAT
Contempla fracciones de segundo y zona horaria.

MASCARAS FORMATO DE FECHA

Las mascaras de tiempo se utilizan para indicar como se realizan las transformaciones de caracter a fecha u hora el formato.

Las mascaras, paras las transformaciones las podéis encontrar en el artículo: “Mascaras de tiempo en Oracle”

FUNCIONES DE CONVERSIÓN

Las conversiones de tipos de datos puede ser:
– IMPLÍCITAS: Realizada automáticamente por Oracle al asignar un valor de tipo date a un tipo CHAR, VARCHAR2, NCHAR, or NVARCHAR2. También al asignarle un CHAR, VARCHAR2, NCHAR, or NVARCHAR2 a un tipo DATE.
– EXPLÍCITAS: El usuario es quien la realiza

CONVERSIONES EXPLICITAS:

TO_CHAR (número | fecha [,’mascara’])
Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato de la mascara.

TO_DATE (char [,’mascara’])
Convierte una cadena de caracteres representando una fecha en un valor de fecha según la mascara especificada..

TO_TIMESTAMP (CARACTER[, ‘mascara'[, ‘NLSPARAM’]]), TO_TIMESTAMP_TZ (CARACTER[, ‘mascara'[, ‘NLSPARAM’]])
Convierte una cadena de caracteres de tipos CHAR, VARCHAR2, NCHAR o NVARCHAR2 a un valor de tipo TIMESTAMP. Es TO_TIMESTAMP_TZ igual a TO_TIMESTAMP, aunque añadiendo el desplazamiento de la zona horaria en relación con GMT o UTC

SQL> select TO_TIMESTAMP ('10-Sep-02 14:10:10.123000',
                      'DD-Mon-RR HH24:MI:SS.FF')
      from dual


TO_TIMESTAMP('10-SEP-0214:10:10.123000','DD-MON-RRHH24:MI:SS.FF')
-----------------------------------------------------------------
10/09/02 14:10:10,123000000

OPERADORES ARITMÉTICOS DE FECHAS

Sumar números a fechas:

SQL> select to_date('01/01/2014', 'dd/mm/yyyy') + 1 from dual;
TO_DATE(
--------
02/01/14

Restar números a fechas:

SQL> select to_date('01/01/2014', 'dd/mm/yyyy') - 1 from dual;

TO_DATE(
--------
31/12/13

Restar dos fechas:

SQL> select to_date('01/01/2015', 'dd/mm/yyyy') -
          to_date('01/01/2014', 'dd/mm/yyyy')
     from dual

TO_DATE('01/01/2015','DD/MM/YYYY')-TO_DATE('01/01/2014','DD/MM/YYYY')
---------------------------------------------------------------------
                                                                  365

FUNCIONES FECHA Y HORAS

SYSDATE

Descripción:
devuelve la fecha y hora actual según la zona horaria configurada del sistema operativo del servidor.

Sintaxis:
SYSDATE

Ejemplos:

SELECT SYSDATE FROM DUAL; -> 06-JUL-13

CURRENT_DATE

Descripción:
devuelve la fecha y hora actual según la zona horaria configurada en la sesión.

Sintaxis:
CURRENT_DATE

Ejemplos:

SELECT CURRENT_DATE FROM DUAL; -> 06-JUL-13

SYSTIMESTAMP

Descripción:
devuelve el timestamp según la zona horaria configurada del sistema operativo del servidor.

Sintaxis:
SYSTIMESTAMP (TIMESTAMP_precision)

Ejemplos:

SELECT SYSTIMESTAMP(9) FROM DUAL;

   -> 06-JUL-13 02.05.08.079356000 AM +02:00

CURRENT_TIMESTAMP

Descripción:
devuelve el timestamp actual según la zona horaria configurada en la sesión.

Sintaxis:
CURRENT_TIMESTAMP (TIMESTAMP_precision)

Ejemplos:

SELECT CURRENT_TIMESTAMP(2) FROM DUAL; -> 06-JUL-13 02.06.20.63 AM +02:00

LOCALTIMESTAMP:

Descripción:
Devuelve la fecha y la hora actuales en la zona horaria de la sesión con un valor del tipo TIMESTAMP.

Sintaxis:
LOCALTIMESTAMP (TIMESTAMP_precision)

Ejemplos:

SELECT LOCALTIMESTAMP(2) FROM DUAL; -> 06-JUL-13 02.07.18.15 AM

ADD_MONTHS

Descripción:
Suma o resta a una fecha, un número n de meses.

Sintaxis:
add_months(fecha,n)

Ejemplos:

select add_months(sysdate,5) from dual; -> 06-DEC-13
select add_months(sysdate,-5) from dual; -> 06-FEB-13
select add_months(sysdate,1) from dual; -> 06-AUG-13

LAST_DAY

Descripción:
Devuelve la fecha del último día del mes que contiene fecha.

Sintaxis:
LAST_DAY (fecha)

Ejemplos:

select last_day(to_date('10/02/2013','DD/MM/YYYY')) from dual; -> 28-FEB-13
select last_day(sysdate) from dual; -> 31-JUL-13

MONTHS_BETWEEN

Descripción:
retorna el numero de meses entre las fechas enviadas como argumento. Ejemplo:

Sintaxis:
months_between(fecha1,fecha2)

Ejemplos:

select months_between(sysdate,to_date('10/02/2013','DD/MM/YYYY')) from dual;

    -> 4.87236858

NEXT_DAY

Descripción:
Devuelve una fecha correspondiente al primer día especificado en “dia” después de la fecha especificada

Sintaxis:
next_day(fecha,dia)

Ejemplos:

Busca el siguiente lunes a partir de hoy
select next_day(sysdate,'MONDAY') from dual; -> 08-JUL-13

EXTRACT

Descripción:
Devuelve la parte especificada por el primer argumento de una fecha, que corresponde al segundo parámetro. Puede extraerse el año (year), mes (month), día (day), hora (hour), minuto (minute), segundo (second), etc.

Sintaxis:
extract(parte,fecha)

Ejemplos:

select extract(month from sysdate) from dual; -> 7

ROUND

Descripción:
Cuando no se especifica ningún formato, devuelve la fecha del primer día del mes contenido en fecha. Si máscara=YEAR, encuentra el primer día del año.

Sintaxis:
ROUND (fecha [,máscara])

Ejemplos:

select round(sysdate,'YEAR') from dual; -> 01-JAN-14

TRUNC

Descripción:
Devuelve la fecha con la porción del día truncado en la unidad especificada por el modelo de formato fmt. Si se omite el formato, laf echa se trunca en el día más próximo.

Sintaxis:
TRUNC (fecha [,máscara])

Ejemplos:

SELECT sysdate, TRUNC(sysdate , 'Month')-1 FROM dual;

    -> 06-JUL-13 30-JUN-13

SYS_EXTRACT_UTC

Descripción:
Devuelve la fecha en UTC (zona horaria universal)

Sintaxis:
SYS_EXTRACT_UTC(datetime_with_timezone)

Ejemplos:

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2013-07-05 11:30:00.00 -08:00') FROM DUAL;

 -> 05-JUL-13 07.30.00.000000000 PM

NUMTOYMINTERVAL

Descripción:
Convierte n a un literal del tipo INTERVAL YEAR TO MONTH.
Unidad de intervalo debe ser una de las siguientes cadenas: ‘DAY’, ‘HOUR’, ‘MINUTE’, ‘SECOND’

Sintaxis:
NUMTOYMINTERVAL(n,’unidad de intervalo’)

Ejemplos:

SELECT to_char(sysdate + numtoyminterval(5, 'MONTH'), 'MM/DD/YYYY') FROM dual; -> 12/06/2013
SELECT to_char(sysdate + numtoyminterval(2, 'YEAR'), 'MM/DD/YYYY') FROM dual; -> 07/06/2015

NUMTODSINTERVAL

Descripción:

Sintaxis:
NUMTODSINTERVAL(n,’unidad de intervalo’)

Ejemplos:

SELECT to_char(sysdate + numtodsinterval(2, 'HOUR'), 'HH:MI AM') FROM dual; -> 03:34 AM
SELECT to_char(sysdate + numtodsinterval(45, 'MINUTE'), 'HH:MI AM') FROM dual; -> 02:20 AM

TZ_OFFSET

Descripción:
devuelve el offset de zona horaria correspondiente al valor introducido.

Sintaxis:
TZ_OFFSET ( [‘time_zone_name’] ‘[+ | -] hh:mm’ ] [ SESSIONTIMEZONE] [DBTIMEZONE])

Ejemplos:

SELECT TZ_OFFSET('Europe/Madrid') FROM DUAL;

Comments are closed.