Funciones de Grupo
Funciones de Caracteres
- Pueden ser de dos tipos:
- Funciones de conversión
- Funciones de manipulación de caracteres
- De manipulación de caracteres:
- De conversión:
Funciones de conversión caracteres
- LOWER: Convierte a minúsculas.
- UPPER: Convierte a mayúsculas.
- INITCAP: Convierte la primera letra de cada palabra en mayúsculas, y el resto en minúscula.
- Atención: Usar una función de conversión dentro de la cláusula WHERE puede ser altamente ineficiente porque si la columna afectada forma parte de un índice éste lo desactiva, provocando un bajo rendimiento.
Funciones manipulación caracteres
- CONCAT: Concatena dos valores.
- SUBSTR: Extrae una subcadena.
- LENGTH: Devuelve la longitud de la cadena.
- INSTR: Devuelve la posición de un carácter o subcadena.
- LPAD: Justifica a la derecha la cadena.
- RPAD: Justifica a la izquierda la cadena.
Funciones Numéricas
- ROUND (columna | expresión, n)
- Redondea a n posiciones decimales. Si se omite n, no se redondea con decimales. Si n es negativo, los números a la izquierda del punto decimal se redondean a decenas, centenas, ...
- TRUNC (columna | expresión, n)
- Trunca en la enésima posición decimal. Si se omite n, sin lugares decimales. Si n es negativo, los números a la izquierda del punto decimal se truncan a cero.
- MOD (m, n)
- Devuelve el resto de la división de m por n.
Ejemplos de funciones numéricas
- SQL> SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1)
FROM SYS.DUAL; - Resultado: 45.92 46 50
- SQL> SELECT TRUNC(45.923, 2), TRUNC(45,923), TRUNC(45.923, -1)
FROM SYS.DUAL; - Resultado: 45.92 45 40
Trabajando con fechas
- Oracle almacena fechas en un formato numérico interno de 7 bytes:
- Siglo, año, mes, día, horas, minutos, segundos
- El formato de fecha por defecto es DD-MON-YY
- SYSDATE es una función que devuelve fecha y hora (pseudocolumna del sistema)
- DUAL es una tabla virtual de la bd., que puede ser usada para inspeccionar SYSDATE.
Operadores aritméticos de fechas
- Sumar o restar un número a/o de una fecha da por resultado una fecha.
- Restar dos fechas para encontrar la cantidad de días entre esas fechas.
- Sumar horas a una fecha dividiendo la cantidad de horas por 24.
Funciones de Fecha (I)
- MONHTS_BETWEEN (fecha1, fecha2)
- Número de meses entre dos fechas. El resultado puede ser positivo o negativo.
- ADD_MONTHS (fecha, n)
- Añade n meses a fecha, según calendario. N debe de ser un número entero y puede ser negativo.
- NEXT_DAY (fecha, ‘caracter’)
- Devuelve la fecha del día especificado (‘carácter’) siguiente a fecha. Carácter puede ser un número representando un día o una cadena de caracteres, p.ej. ‘FRIDAY’.
Funciones de Fecha (II)
- LAST_DAY (fecha)
- Devuelve la fecha del último día del mes que contiene fecha.
- ROUND (fecha [,’fmt’])
- Cuando no se especifica ningún formato, devuelve la fecha del primer día del mes contenido en fecha. Si fmt=YEAR, encuentra el primer día del año.
- TRUNC (fecha [,’fmt’])
- 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.
Ejemplos funciones de fecha
- MONTS_BETWEEN (‘01-SEP-95’, ‘11-JAN-94’)
19.6774194
- ADD_MONTHS(‘11-JAN-94’, 6)
‘11-JUL-94’
- NEXT_DAY (‘01-SEP-95’, ‘FRIDAY’)
‘08-SEP-95’
- LAST_DAY (‘01-SEP-95’)
‘30-SEP-95’
- ROUND (‘25-JUL-95’, ‘MONTH’)
‘01-AUG-95’
- ROUND (‘25-JUL-95’, ‘YEAR’)
‘01-JAN-96’
- TRUNC (‘25-JUL-95’, ‘MONTH’)
‘01-JUL-95’
- TRUNC (‘25-JUL-95’, ‘YEAR’)
‘01-JAN-95’
Formatos de Fecha (I)
- YYYY / YEAR
- Año completo en número / Año en letras
- MM / MONTH
- Nº del mes con dos dígitos / Nombre completo del mes
- DY / DAY
- Día de la semana en tres letras / Nombre completo del día
- fm (fill mode)
- Elimina los espacios en blanco de relleno o suprime ceros a la izquierda
Formatos de Fecha (II)
- Obtención de la hora:
- HH / HH12 / HH24
- Hora del día / Hora (1-12) / Hora (1-24)
- MI / SS / SSSS
- Minutos / Segundos / Segundos después de medianoche
- AM o PM
- Indicador del Meridiano
- Sufijo SP / SPTH o THSP
- Deletreo del número / Deletreo números ordinales
- Se permiten literales
- HH / HH12 / HH24
Funciones de conversión (I)
- La conversión de tipos de datos puede ser:
-
- IMPLÍCITA: Realizada automáticamente por Oracle
- EXPLÍCITA: El usuario es quien la realiza
-
- Conversión Implícita de datos
-
- De VARCHAR2 o CHAR
a NUMBER
- De VARCHAR2 o CHAR
a DATE
- De NUMBER
a VARCHAR2
- De DATE
a VARCHAR2
- De VARCHAR2 o CHAR
- Estas conversiones se realizan por asignaciones, si Oracle 8 puede convertir el tipo de dato del valor utilizado en la asignación en el tipo de dato que era el objetivo de la asignación.
-
Funciones de conversión (II)
- TO_CHAR (número | fecha [,’fmt’])
- Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato fmt.
- 9: Representa un número
- 0: Fuerza a que se muestra el cero
- $: Signo de dólar
- L: Usa el signo de moneda local
- .: Imprime el punto decimal
- ;: Imprime el indicador de millar
- Para fechas, los fmt anteriores.
- Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato fmt.
Funciones de conversión (III)
- TO_NUMBER (char)
- Convierte una cadena de caracteres con dígitos en un número.
- TO_DATE (char [,’fmt’])
- Convierte una cadena de caracteres representando una fecha en un valor de fecha según el fmt especificado. Si se omite el fmt, el formato es DD-MON-YY.
- NVL (expr1, expr2)
- Convierte un nulo (expr1) a un valor de tipo fecha, cadena o número (expr2).
DECODE
- Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas condicionales.
- Descifra una expresión después de compararla con cada valor de búsqueda. Si la expresión es la misma que la búsqueda, se devuelve el resultado. Si se omite el valor por defecto, se devolverá un valor nulo donde una búsqueda no coincida con ninguno de los valores resultantes.
Uso de DECODE
- SQL> SELECT job, sal,
DECODE (job, ‘ANALYST’, sal*1.1, ‘CLERK’, sal*1.15, ‘MANAGER’, sal*1.20, sal) AS “Nuevo salario”
FROM emp; - Si job = ‘ANALYST ‘ entonces el salario se incrementa en un 10%
- Si job = ‘CLERK’ entonces se incrementa en un 15%
- Si jog = ‘MANAGER’ entonces se incrementa en un 20%
- Para otro caso, entones no hay incremento de salario
0 comentarios