Función escalar EXTRACT
La función EXTRACT devuelve una parte de una fecha y hora basada en sus argumentos.
Extraer valores de fecha
Extraer valores de hora
El esquema es SYSIBM.
Si el argumento puede ser nulo, el resultado puede ser nulo; si el argumento es nulo, el resultado es el valor nulo.
Extraer valores de fecha
- EPOCH
- Se devuelve el número de segundos desde 1970-01-01 00:00:00.00 para la expresión de fecha o de indicación de fecha y hora especificada. Una duración no se puede especificar (SQLCODE SQL0171, SQLSTATE 22546). El valor es positivo si la expresión representa una fecha o una indicación de fecha y hora que es posterior a 1970-01-01 00:00:00.00; el valor es negativo para una fecha o una indicación de fecha y hora que es anterior a 1970-01-01 00:00:00.00.
- MILLENNIUM o MILLENNIUMS
- Se devuelve el número ordinal del periodo completo de 100 años de la expresión de fecha o de indicación de fecha y hora especificada o la duración; por ejemplo, 2 para una fecha entre el 1 de enero de 2000 y el 31 de diciembre de 2999
- CENTURY o CENTURIES
- Se devuelve el número ordinal del periodo completo de 100 años de la expresión de fecha o de indicación de fecha y hora especificada o la duración; por ejemplo, 20 para una fecha entre el 1 de enero de 2000 y el 31 de diciembre de 2099. No se debe confundir con el sistema ordinal que cuenta los días hasta el año 100 como inicio del "primer siglo", las fechas entre el 1 de enero de 2000 y el 31 de diciembre de 2099 como que están en el "siglo 21", etc.
- DECADE o DECADES
- Se devuelve el número ordinal del periodo completo de 100 años de la expresión de fecha o de indicación de fecha y hora especificada o la duración; por ejemplo, 201 para una fecha entre el 1 de enero de 2010 y el 31 de diciembre de 2019.
- YEAR o YEARS
- Se devuelve la parte de años de la expresión de fecha o de indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve la función escalar YEAR.
- QUARTER
- Se devuelve el trimestre (1, 2, 3 o 4) del año de la expresión de fecha o de indicación de fecha y hora especificada o la duración.
- MONTH
- Se devuelve el número (1 - 12) del mes de la expresión de fecha o de indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve la función escalar MONTH.
- WEEK
- Se devuelve el número (1 - 53) de la semana del año de la expresión de fecha o de indicación de fecha y hora especificada o la duración. El valor utiliza la definición ISO-8601 de una semana, que comienza en lunes; como resultado, puede que algunos años tengan 53 semanas y, a veces, los primeros días de enero pueden incluirse como parte de la semana 52 o 53 del año anterior.
- DAY o DAYS
- Se devuelve el número (1 - 31) del día de la expresión de fecha o de indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve la función escalar DAY.
- DOW
- Se devuelve un número (1 para domingo, 2 para lunes, …, 7 para sábado) que indica el día de la semana de la expresión de fecha o de indicación de fecha y hora especificada. No se puede especificar una duración (SQLCODE SQL0171, SQLSTATE 22546).
- DOY
- Se devuelve un número (1 - 366) que indica el día del año de la expresión de fecha o de indicación de fecha y hora especificada. No se puede especificar una duración (SQLCODE SQL0171, SQLSTATE 22546).
- expresión-fecha
- Expresión que devuelve el valor de un tipo de datos DATE incorporado o de un tipo de datos de serie de caracteres incorporada.
Si una expresión de fecha es una serie de caracteres, debe ser una representación de serie válida de una fecha que no sea un CLOB. En una base de datos Unicode, si una expresión de fecha es una serie gráfica, en primer lugar, se convierte a una serie de caracteres antes de que se ejecute la función.
- expresión-indicación-fecha-hora
- Expresión que devuelve el valor de un tipo de datos TIMESTAMP incorporado o de un tipo de datos de serie de caracteres incorporada.
Si una expresión de indicación de fecha y hora es una serie de caracteres, debe ser una representación de serie válida de una indicación de fecha y hora que no sea un CLOB. En una base de datos Unicode, si una expresión de indicación de fecha y hora es una serie gráfica, en primer lugar, se convierte a una serie de caracteres antes de que se ejecute la función.
- date-duration
- Un número DECIMAL(8,0) que especifica una duración de fecha (consulte Operaciones de fecha y hora y duraciones).
- timestamp-duration
- Un número DECIMAL(14+s,s) que especifica una duración de indicación de fecha y hora, donde s representa el número de dígitos o fracciones de segundo que oscila de 0 a 12 (consulte Operaciones de fecha y hora y duraciones).
Extraer valores de hora
- HOUR o HOURS
- Se devuelve la parte de horas de la expresión de hora o de indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve la función escalar HOUR.
- MINUTE o MINUTES
- Se devuelve la parte de minutos de la expresión de hora o indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve la función escalar MINUTE.
- SECOND o SECONDS
- Se devuelve la parte de segundos de la expresión de hora o indicación de fecha y hora especificada o la duración. El resultado es idéntico a lo que devuelve:
- SECOND(expression, 6) cuando el tipo de datos de la expresión o duración es un valor TIME o una representación de serie de TIME o TIMESTAMP
- SECOND(expression, s) cuando el tipo de datos de la expresión o duración es un valor TIMESTAMP(s)
- MILLISECOND o MILLISECONDS
- Se devuelve la parte de segundos de la expresión de indicación de fecha y hora especificada o duración, incluidas las partes fraccionales hasta una milésima de segundo, multiplicado por 1000 (0 - 59999). No se puede especificar una expresión de tiempo o duración (SQLCODE SQL0180, SQLSTATE 22007).
- MICROSECOND o MICROSECONDS
- Se devuelve la parte de segundos de la expresión de indicación de fecha y hora especificada o la duración, incluyendo las partes fraccionales hasta una millonésima de segundo, multiplicado por 1000000 (0 - 59999999). No se puede especificar una expresión de tiempo o duración (SQLCODE SQL0180, SQLSTATE 22007).
- expresión-hora
- Expresión que devuelve el valor de un tipo de datos TIME incorporado o de un tipo de datos de serie de caracteres incorporada.
Si una expresión de hora es una serie de caracteres, debe ser una representación de serie válida de una hora que no sea un CLOB. En una base de datos Unicode, si una expresión de hora es una serie gráfica, en primer lugar, se convierte a una serie de caracteres antes de que la función se ejecute.
- expresión-indicación-fecha-hora
- Expresión que devuelve el valor de un tipo de datos DATE, TIMESTAMP incorporado o de un tipo de datos de serie de caracteres incorporada.
Si expresión-indicación-fecha-hora es un valor DATE, éste se convierte en un valor TIMESTAMP(0), dándose por supuesta la hora exacta de la medianoche (00.00.00).
Si una expresión de indicación de fecha y hora es una serie de caracteres, debe ser una representación de serie válida de una indicación de fecha y hora o de una hora que no sea una CLOB. En una base de datos Unicode, si una expresión de indicación de fecha y hora es una serie gráfica, en primer lugar, se convierte a una serie de caracteres antes de que se ejecute la función. La serie se convierte en un valor TIMESTAMP(6).
- time-duration
- Un número DECIMAL(6,0) que especifica una duración de tiempo (consulte Operaciones de fecha y hora y duraciones).
- timestamp-duration
- Un número DECIMAL(14+s,s) que especifica una duración de indicación de fecha y hora, donde s representa el número de dígitos o fracciones de segundo que oscila de 0 a 12 (consulte Operaciones de fecha y hora y duraciones).
- Si se especifica MILLENNIUM, CENTURY, DECADE, YEAR, QUARTER, MONTH, WEEK, DAY, DOW, DOY, HOUR o MINUTE, el tipo de datos del resultado es INTEGER.
- Si se especifica SECOND con un valor TIMESTAMP(p), el tipo de datos del resultado es DECIMAL(2+p, p), donde p es la precisión en segundos fraccionarios.
- Si se especifica SECOND con un valor de TIME o una representación de serie de TIME o TIMESTAMP, el tipo de datos del resultado es DECIMAL(8,6).
- Si se especifica MILLISECOND, MILLISECONDS, MICROSECOND o MICROSECONDS con un valor TIMESTAMP(p), el tipo de datos del resultado es INTEGER.
- Si se especifica EPOCH, el tipo de datos del resultado es BIGINT.
Si el argumento puede ser nulo, el resultado puede ser nulo; si el argumento es nulo, el resultado es el valor nulo.
Ejemplos
En una tabla con el nombre PROJECT:-
La columna col1 contiene el valor de fecha '1988-12-25'. La sentencia siguiente devuelve el valor entero 12:
SELECT EXTRACT(MONTH FROM col1) FROM PROJECT; -
La columna col2 contiene el valor de indicación de fecha y hora '2007-02-14 12:15:06.123456'. La sentencia siguiente devuelve el valor entero 6123:
La sentencia siguiente devuelve el valor entero 6123456:SELECT EXTRACT(MILLISECONDS FROM col2) FROM PROJECT;SELECT EXTRACT(MICROSECONDS FROM col2) FROM PROJECT; - La columna col3 contiene el valor de fecha '2013-02-14'. La sentencia siguiente devuelve el valor entero
201:
SELECT EXTRACT(DECADE FROM col3) FROM PROJECT; - La columna col4 tiene un tipo de datos de DECIMAL(8,0) y contiene el valor 12301000.
Puesto que el tipo de datos es DECIMAL(8,0), este valor se interpretará como una duración de fecha (1230
años, 10 meses, 00 días). La sentencia siguiente devuelve el valor entero
10:
SELECT EXTRACT(MONTH FROM col4) FROM PROJECT; - La columna col5 tiene un tipo de datos de DECIMAL(6,0) y contiene el valor 123010.
Puesto que el tipo de datos es DECIMAL(6,0), este valor se interpretará como una duración de tiempo (12 horas, 30 minutos, 10 segundos). La sentencia siguiente devuelve el valor entero
10:
SELECT EXTRACT(SECONDS FROM col5) FROM PROJECT; - La columna col6 tiene un tipo de datos de DECIMAL(16,2) y contiene el valor
12301000123010.45. Puesto que el tipo de datos es DECIMAL(16,2), este valor se interpretará como una duración de indicación de fecha y hora (1230 años, 10 meses, 00 días, 12 horas, 30 minutos y 10,45 segundos). La sentencia siguiente devuelve el valor entero 10450:
SELECT EXTRACT(MILLISECOND FROM col6) FROM PROJECT;
