Práctica 2: Funciones de SQL • En una consulta SQL las funciones ejecutan operaciones que transforman los datos. • Pueden aparecer: – en el SELECT para visualizar los datos transformados, – o en el WHERE para comparar su resultado con otro valor. II18--Universitat Jaume I 1 Valores Nulos • Cuando el valor de una columna para una determinada fila es desconocido, se dice que tiene un valor nulo. • Ejemplos: – Se desconoce el valor de una propiedad para cierta ocurrencia de una entidad. (No se conoce el pueblo de un cliente) – Una propiedad no que tiene sentido para cierta ocurrencia de una entidad. (DNI de un niño) II18--Universitat Jaume I 2 1 Filtrado de valores nulos SELECT NVL(codpue, ’Desconocido!!!’) TABLA CLIENTES FROM clientes CODCLI NOMBRE DIRECCION WHERE codcli < 25; 20 ‘José Pérez’ ‘Barcelona 2’ 13 12 27 ‘María Gil’ ‘Luis Sorlí’ ‘Laura Puig’ ‘Peñas 5’ ‘Prim 7’ ‘Peñas 24’ CODPOSTAL CODPUE ‘13004’ ‘15008’ ‘12003’ ‘15008’ ‘1400’ ‘1456’ ‘1456’ RESULTADO CODPUE ‘1400’ ‘1456’ ‘Desconocido!!!’ II18--Universitat Jaume I 3 Comprobación de valores nulos TABLA CLIENTES CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE 20 13 12 27 ‘Barcelona 2’ ‘Peñas 5’ ‘Prim 7’ ‘Peñas 24’ ‘13004’ ‘15008’ ‘12003’ ‘15008’ SELECT * FROM clientes WHERE codpue IS NULL; ‘José Pérez’ ‘María Gil’ ‘Luis Sorlí’ ‘Laura Puig’ ‘1400’ ‘1456’ ‘1456’ RESULTADO CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE 12 ‘Prim 7’ ‘12003’ ‘Luis Sorlí’ II18--Universitat Jaume I 4 2 Ejemplos del uso de funciones SELECT * FROM clientes WHERE codpue IS NOT NULL; SELECT codfac, fecha FROM facturas WHERE NVL( iva, 0 ) = 0; SELECT DISTINCT codart FROM lineas_fac WHERE codfac BETWEEN 8 AND10; II18--Universitat Jaume I 5 Formatos de fecha (para TO_DATE y TO_CHAR) Formato Ejemplo Formato Ejemplo YYYY YY Q WW MM DDD MON MONTH DAY ’1999’ ’99’ ’3’ ’10’ ’09’ ’203’ ’ENE’ ’ENERO’ ’LUNES’ DD/MM/YY DD-MM-YYYY DD/MON/YY DDMMYYYY ’01/09/99’ ’01-09-1999’ ’01/SEP/99’ ’01091999’ ... Y muchos más ... II18--Universitat Jaume I 6 3 Manipulación de fechas SELECT SYSDATE FROM dual; 11-10-04 SELECT dto, TO_CHAR(fecha, ‘dd-mm-yy’) FROM facturas WHERE codfac = 10; 2 26-03-01 SELECT codfac FROM facturas WHERE TO_NUMBER( TO_CHAR(SYSDATE, ‘yyyy’) ) TO_NUMBER( TO_CHAR(fecha, ‘yyyy’) ) = 1; II18--Universitat Jaume I 7 LIKE (comparación de cadenas) SELECT codcli FROM clientes WHERE nombre LIKE ‘%garcia%’; % _ cualquier cadena Î cualquier carácter Î SELECT codpue FROM pueblos WHERE nombre LIKE ‘%palma_’; SELECT codpue FROM pueblos WHERE nombre LIKE ‘palm_s’; II18--Universitat Jaume I 8 4 SUBSTR, UPPER y LENGTH SELECT codpro FROM provincias WHERE SUBSTR(nombre, 1, 2) = ‘ca’; SELECT codpro FROM provincias WHERE UPPER( SUBSTR(nombre, 1, 2) ) = ‘CA’; SELECT SUBSTR(nombre, LENGTH(nombre) - 3) FROM provincias WHERE nombre LIKE ‘Valenc% ; ncia II18--Universitat Jaume I 9 CASE CASE WHEN expresión1 THEN ret1 WHEN expresión2 THEN ret2 … ELSE retn END select codfac, CASE WHEN iva = 16 THEN ‘normal’ WHEN iva = 7 THEN ‘reducido’ ELSE ‘otros’ END FROM facturas WHERE dto = 20 ; II18--Universitat Jaume I 10 5 CASE SELECT codart, descrip, precio, precio * CASE WHEN stock > 2 * stock_min THEN 0.8 ELSE 1 END FROM articulos WHERE codart like ‘A%’ ; II18--Universitat Jaume I 11 6