El artículo de hoy está dedicado a una función del lenguaje SQL. Se trata de una función poco difundida pero que suele venir como anillo al dedo cuando operamos sobre datos de tipo DATE, DATETIME o INTERVAL. Me estoy refiriendo a la función EXTRACT . Para simplificar las cosas trabajaremos y ejemplificaremos sobre datos de tipo DATE. Pues bien, ¿para qué sirve la función EXTRACT? Veamos… EXTRACT me permite “quitar” una parte del valor de una columna o expresión de tipo DATE. Por ejemplo extraer el mes de una columna o expresión que almacena una fecha. Veamos un ejemplo básico: SQL> select extract (year from sysdate) Anio from dual; ANIO ---------- 2016 ¿Qué otras cosas puedo extraer? Dependerá del tipo de dato sobre el que estamos operando, pero en el caso del tipo de dato DATE puedo extraer año, mes y día: SQL> select sysdate fecha, 2 extract (year from sysdate) anio, 3 extract (month from sysdate) mes, 4 extract (day from sysdate) dia 5 from dual; FECHA ANIO MES DIA --------- ------ ----- ----- 05-MAR-16 2016 3 5 Ahora bien, en Oracle el tipo de dato fecha contiene también la hora: SQL> alter session set nls_date_format = 'DD-MON-YY HH24:MI:SS'; Session altered. SQL> select sysdate from dual; SYSDATE ------------------ 05-MAR-16 07:43:17 ¿Qué ocurre si intento extraer la hora de una expresión de tipo fecha? Hagamos la prueba: SQL> select extract (hour from sysdate) from dual; select extract (hour from sysdate) from dual * ERROR at line 1: ORA-30076: invalid extract field for extract source Oracle no me permite extraer la hora de un tipo de dato fecha a pesar de que, en Oracle, la hora es parte del tipo de dato DATE. ¿Por qué no puedo hacerlo? Ante situaciones como esta siempre conviene comenzar a investigar utilizando la documentación oficial del producto. Afortunadamente, los manuales nos dan una respuesta que clarifica la situación. EXTRACT interpreta a la expresión (en nuestro caso SYSDATE) como si fuera un tipo de dato ANSI. Por lo tanto EXTRACT trata al tipo de dato DATE como si fuera un ANSI DATE, es decir sin los componentes de hora. Gracias a la función EXTRACT la manipulación de fechas se hace mucho más sencilla. Nos vemos!
↧