3. 1. Funciones
Oracle incorpora una serie de instrucciones que permiten realizar cálculos avanzados, o bien facilitar la
escritura de ciertas expresiones. Todas las funciones reciben datos para poder operar (parámetros) y devuelven
un resultado (que depende de los parámetros enviados a la función. Los argumentos se pasan entre paréntesis:
nombreFunción [(parámetro1[, parámetro2,...])]
Si una función no precisa parámetros (como SYSDATE) no hace falta colocar los paréntesis.
1.1. Funciones Numéricas
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Matemáticas (SIN, COS, TAN, SQRT, ABS, SIGN, POWER, EXP, MOD, LOG).
Redondeo (CEIL, FLOOR, ROUND, TRUC).
1.1.1. SIN
Esta función devuelve el seno del parámetro p introducido, donde p tiene que estar en radianes (un radián
son 180/π grados, aproximadamente 57.296◦ ), y cuya sintaxis (1.1.1), ejemplo (1.1.1) y salida (1.1.1) se
muestran a continuación:
SIN (parámetro p)
1 SELECT SIN(1) FROM DUAL;
SIN(1)
----------
.841470985
1.1.2. COS
Esta función devuelve el coseno del parámetro p introducido, donde p tiene que estar en radianes (un
radián son 180/π grados, aproximadamente 57.296◦ ), y cuya sintaxis (1.1.2), ejemplo (1.1.2) y salida (1.1.2)
se muestran a continuación:
COS (parámetro p)
3
4. 1 SELECT COS(3.14) FROM DUAL;
COS(3.14)
----------
-.99999873
1.1.3. TAN
Esta función devuelve la tangente del parámetro p introducido, donde p tiene que estar en radianes (te-
niendo especial cuidado en valores que no acepta la función tangente, π /2 + n, n ∈ N), y cuya sintaxis (1.1.3),
ejemplo (1.1.3) y salida (1.1.3) se muestran a continuación:
TAN (parámetro p)
1 SELECT TAN(0.7853) FROM DUAL;
TAN(0.7853)
-----------
.999803692
1.1.4. SQRT
Esta función devuelve la raíz cuadrada del parámetro p introducido, donde p tiene que ser mayor o igual
a cero atendiendo a la definiendo de la función raíz cuadrado que no acepta estos valores devolviendo un
número real, y cuya sintaxis (1.1.4), ejemplo (1.1.4) y salida (1.1.4) se muestran a continuación:
SQRT (parámetro p)
1 SELECT SQRT(8.99) FROM DUAL;
SQRT(8.99)
----------
2.99833287
4
5. 1.1.5. ABS
Esta función devuelve el valor absoluto del parámetro p introducido, y cuya sintaxis (1.1.5), ejemplo
(1.1.5) y salida (1.1.5) se muestran a continuación:
ABS (parámetro p)
1 SELECT ABS(8.99), ABS(-8.99) FROM DUAL;
ABS(8.99) ABS(-8.99)
---------- ----------
8.99 8.99
1.1.6. SIGN
Esta función devuelve el signo del parámetro p introducido, para ello, viene codificado:
0 if p = 0
SIN G(p) = 1 if p > 0
−1 if p < 0
Cuya sintaxis (1.1.6), ejemplo (1.1.6) y salida (1.1.6) se muestran a continuación:
SIGN (parámetro p)
1 SELECT SIGN(8.99), SIGN(-8.99), SIGN(0) FROM DUAL;
SIGN(8.99) SIGN(-8.99) SIGN(0)
---------- ----------- ----------
1 -1 0
1.1.7. POWER
Esta función requiere de dos parámetros de entrada, uno será la base y el otro sérá el exponente. Por lo
que, esta función devolverá el valor obtenido de elevar a la base el exponente. Y donde cuya sintaxis (1.1.7),
ejemplo (1.1.7) y salida (1.1.7) se muestran a continuación:
POWER (base, exponente)
5
6. 1 SELECT POWER(2.3,3) FROM DUAL;
POWER(2.3,3)
------------
12.167
1.1.8. EXP
Esta función es similar a la anterior 1.1.7, salvo que ésta sólo requiere de un parámetro (exponente) y la
base aquí siempre es e. Por lo que, esta función devolverá el valor obtenido del exponente en base e. Y donde
cuya sintaxis (1.1.8), ejemplo (1.1.8) y salida (1.1.8) se muestran a continuación:
EXP (exponente)
1 SELECT EXP(1) FROM DUAL;
EXP(1)
----------
2.71828183
1.1.9. MOD
Esta función devuelve un entero que es el resto obtenido de dividir el p1 entre el p2, y cuya sintaxis (1.1.9),
ejemplo (1.1.9) y salida (1.1.9) se muestran a continuación:
MOD (parámetro1 p1, parámetro2 p2)
1 SELECT MOD(19,5) FROM DUAL;
MOD(19,5)
----------
4
6
7. 1.1.10. LOG
Esta función devuelve el logaritmo en base b del parámetro p (la función sólo está definida para b y p
mayores que cero), y cuya sintaxis (1.1.10), ejemplo (1.1.10) y salida (1.1.10) se muestran a continuación:
LOG ( base b, parámetro p)
1 SELECT LOG(10, 1) FROM DUAL;
LOG(10,1)
----------
0
1.1.11. CEIL
Esta función devuelve el valor entero inmediatamente superior o igual al parámetro p, y cuya sintaxis
(1.1.11), ejemplo (1.1.11) y salida (1.1.11) se muestran a continuación:
CEIL (parámetro p)
1 SELECT CEIL(3.1), CEIL(3), CEIL(3.6) FROM DUAL;
CEIL(3.1) CEIL(3) CEIL(3.6)
---------- ---------- ----------
4 3 4
1.1.12. FLOOR
Esta función devuelve el valor entero inmediatamente inferior o igual al parámetro p, y cuya sintaxis
(1.1.12), ejemplo (1.1.12) y salida (1.1.12) se muestran a continuación:
FLOOR (parámetro p)
1 SELECT FLOOR(3.1), FLOOR(3), FLOOR(3.6) FROM DUAL;
7
8. FLOOR(3.1) FLOOR(3) FLOOR(3.6)
---------- ---------- ----------
3 3 3
1.1.13. ROUND
Esta función redondea a n posiciones decimales. Si se omite n no se redondea con lugares decimales. Y si n
es negativo los números a la izquierda del punto decimal se redondean. La sintaxis (1.1.13), ejemplo (1.1.13)
y salida (1.1.13) se muestran a continuación:
ROUND (parámetro p [, n])
1 SELECT ROUND (45.923, 2), ROUND (45.923, 0), ROUND (45.923, -1)
FROM DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- --------------- ----------------
45.92 46 50
1.1.14. TRUNC
Esta función trunca la columna o valor con precisión de dígitos atendiendo a n. Si se omite n, sin lugares
decimales. Y si n es negativo, los números a la izquierda del punto decimal se truncan a cero. La sintaxis
(1.1.14), ejemplo (1.1.14) y salida (1.1.14) se muestran a continuación:
TRUNC (parámetro p [, n])
1 SELECT TRUNC (45.923, 2), TRUNC (45.923), TRUNC (45.923, -1) FROM
DUAL;
TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
--------------- ------------- ----------------
45.92 45 40
8
9. 1.2. Funciones de Cadenas de Caracteres
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Manipulación (CONCAT, LENGTH, REPLACE, TRIM, LTRIM, RTRIM, LPAD, RPAD, SUBSTR, TO_CHAR).
Transformación (INITCAP, UPPER, LOWER).
1.2.1. CONCAT
Esta función concatena dos cadenas de caracteres. Es equivalente al operador concatenación ||. La sintaxis
(1.2.1), ejemplo (1.2.1) y salida (1.2.1) se muestran a continuación:
CONCAT (cadena1 c1, cadena2 c2)
1 SELECT CONCAT (’BASE DE’, ’ DATOS’) AS CONCATENAR1, (’BASE DE ’ ||
’DATOS’) AS CONCATENAR2 FROM DUAL;
CONCATENAR1 CONCATENAR2
------------- -------------
BASE DE DATOS BASE DE DATOS
1.2.2. INITCAP
Esta función convierte la primera letra de cada palabra en mayúsculas y el resto de letras en minúsculas.
La sintaxis (1.2.2), ejemplo (1.2.2) y salida (1.2.2) se muestran a continuación:
INITCAP (cadena c)
1 SELECT INITCAP (’BASE DE DATOS’) AS INITCAP FROM DUAL;
INITCAP
-------------
Base De Datos
9
10. 1.2.3. UPPER
Esta función convierte en mayúsculas las cadenas de caracteres en minúsculas. La sintaxis (1.2.3), ejemplo
(1.2.3) y salida (1.2.3) se muestran a continuación:
UPPER (cadena c)
1 SELECT UPPER (’Base DE datos’) AS UPPER FROM DUAL;
UPPER
-------------
BASE DE DATOS
1.2.4. LOWER
Esta función convierte en mayúsculas las cadenas de caracteres en minúsculas. La sintaxis (1.2.4), ejemplo
(1.2.4) y salida (1.2.4) se muestran a continuación:
LOWER (cadena c)
1 SELECT LOWER (’Base DE datos’) AS LOWER FROM DUAL;
LOWER
-------------
base de datos
1.2.5. LENGTH
Esta función devuelve la longitud de una cadena de caracteres. La sintaxis (1.2.5), ejemplo (1.2.5) y salida
(1.2.5) se muestran a continuación:
LENGTH (cadena c)
1 SELECT LENGTH (’Base DE datos’) AS LENGTH FROM DUAL;
10
11. LENGTH
----------
13
1.2.6. REPLACE
Esta función busca el texto a buscar (en un determinado texto) y lo cambia por el indicado como texto de
reemplazo. La sintaxis (1.2.6), ejemplo (1.2.6) y salida (1.2.6) se muestran a continuación:
REPLACE(texto, textoABuscar, textoReemplazo)
1 SELECT REPLACE (’Base DE dat’, ’dat’, ’datos’) AS REPLACE FROM DUAL
;
REPLACE
-------------
Base DE datos
1.2.7. TRIM
Esta función elimina del texto los caracteres indicados a la izquierda y a la derecha. Aunque se podría
eliminar sólo los de la izquierda (leading), los de la derecha (trailing) o ambos (both), aunque para ello, será
mejor utilizar RTRIM (1.2.8), LTRIM (1.2.8) ó TRIM (1.2.7). Sino se añade los caracteres se elige el espacio.
La sintaxis (1.2.7), ejemplo (1.2.7) y salida (1.2.7) se muestran a continuación:
TRIM ( [ [leading | trailing | both] trim_character FROM ] cadena
)
1 SELECT TRIM (’ BASE DE DATOS ’) AS TRIM_ESP, TRIM(’*’ FROM ’***
BASE DE DATOS****’) AS TRIM_FROM FROM DUAL;
TRIM_ESP TRIM_FROM
------------- -------------
BASE DE DATOS BASE DE DATOS
11
12. 1.2.8. LTRIM y RTRIM
Esta función suprime un conjunto de caracteres a la izquierda (RTRIM a la derecha) de la cadena, carsup
es el conjunto de caracteres que se van a suprimir y sino se especifica es el espacio. Esta función devuelve
entonces la cadena con el conjunto de caracteres carsup o espacios omitidos por la izquierda de la cadena. La
sintaxis (1.2.8), ejemplo (1.2.8) y salida (1.2.8) se muestran a continuación:
LTRIM (cadena [,carsup])
RTRIM (cadena [,caracter])
1 SELECT LTRIM(’ BASE’) L, LTRIM(’BASE’, ’BA’) LCARSUP, RTRIM (’BASE
’) R, RTRIM(’BASE’, ’ASE’) RCARSUP FROM DUAL;
L LCARSUP R RCARSUP
---- ------- ---- -------
BASE SE BASE B
1.2.9. LPAD y RPAD
Esta función justifica a la derecha (RPAD a la izquierda) con un ancho de n y rellena con un carácter o
string los espacios vacíos. La sintaxis (1.2.9), ejemplo (1.2.9) y salida (1.2.9) se muestran a continuación:
LPAD(texto, anchuraMáxima [, caracterDeRelleno])
RPAD(texto, anchuraMáxima [, caracterDeRelleno])
1 SELECT LPAD(’BASE’, 2) L, LPAD(’BASE’, 6, ’*’) L, RPAD(’BASE’,7,’0’
) R FROM DUAL;
L L R
-- ------ -------
BA **BASE BASE000
1.2.10. SUBSTR
Esta función obtiene los m siguientes caracteres del texto a partir de la posición n (si m no se indica se cogen
desde n hasta el final). La sintaxis (1.2.10), ejemplo (1.2.10) y salida (1.2.10) se muestran a continuación:
SUBSTR(texto,n[,m])
12
13. 1 SELECT SUBSTR(’BASE DE DATOS’, 2, 4) S1, SUBSTR(’BASE DE DATOS’, 2)
S2 FROM DUAL;
S1 S2
---- ------------
ASE ASE DE DATOS
1.2.11. TO_CHAR
Esta función obtiene un texto a partir de un número o una fecha. En especial se utiliza con fechas (ya que
de número a texto se suele utilizar de forma implícita (ver 2). La sintaxis (1.2.11), ejemplo (1.2.11) y salida
(1.2.11) se muestran a continuación:
TO_CHAR(valor, formato)
1 SELECT TO_CHAR(1210.73, ’9999.9’) C1, TO_CHAR(1210.73, ’$9,999.000’
) C2, TO_CHAR(SYSDATE, ’FMMonth DD, YYYY’) C3 FROM DUAL;
C1 C2 C3
------- ----------- ------------------
1210.7 $1,210.730 November 1, 2012
1.3. Funciones de Manejo de Fechas
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Calcular fecha (ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY).
Obtener la fecha (SYSDATE, CURRENT_DATE, TO_DATE).
1.3.1. ADD_MONTHS
Esta función añade a la fecha el número de meses indicado por n. La sintaxis (1.3.3), ejemplo (1.3.3) y
salida (1.3.3) se muestran a continuación:
ADD_MONTHS(fecha,n)
13
14. 1 SELECT ADD_MONTHS(’01-Aug-03’, 3) FECHA FROM DUAL;
FECHA
---------
01-NOV-03
1.3.2. MONTHS_BETWEEN
Esta función obtiene la diferencia en meses entre las dos fechas (puede ser decimal) (ver 1.3.7). La sintaxis
(1.3.3), ejemplo (1.3.3) y salida (1.3.3) se muestran a continuación:
MONTHS_BETWEEN(fecha1,fecha2)
1 SELECT MONTHS_BETWEEN(TO_DATE(’2003/01/01’, ’yyyy/mm/dd’), TO_DATE(
’2003/03/14’, ’yyyy/mm/dd’)) DIF FROM DUAL;
DIF
----------
-2.4193548
1.3.3. SYSDATE
Esta función obtiene la fecha y hora actuales. La sintaxis (1.3.3), ejemplo (1.3.3) y salida (1.3.3) se mues-
tran a continuación:
SYSDATE
1 SELECT SYSDATE FROM DUAL;
SYSDATE
---------
10-NOV-12
14
15. 1.3.4. NEXT_DAY
Esta función indica cual es el día que corresponde a añadir a la fecha el día indicado. El día puede ser
el texto ’Lunes’, ’Martes’, ’Miércoles’,... (si la configuración está en español) o el número de día de la semana
(1=lunes, 2=martes,...). La sintaxis (1.3.4), ejemplo (1.3.4) y salida (1.3.4) se muestran a continuación:
NEXT_DAY(fecha,día)
1 SELECT NEXT_DAY(’01-Aug-03’, ’TUESDAY’) FECHA FROM DUAL;
FECHA
---------
05-AUG-03
1.3.5. LAST_DAY
Esta función obtiene el último día del mes al que pertenece la fecha (ver 1.3.7. Devuelve un valor DATE.
La sintaxis (1.3.5), ejemplo (1.3.5) y salida (1.3.5) se muestran a continuación:
LAST_DAY(fecha)
1 SELECT LAST_DAY(to_date(’2003/03/15’, ’yyyy/mm/dd’)) FECHA FROM
DUAL;
FECHA
---------
31-MAR-03
1.3.6. CURRENT_DATE
Esta función obtiene la fecha y hora actuales e incluye la zona horaria. Devuelve un valor DATE. La sintaxis
(1.3.6), ejemplo (1.3.6) y salida (1.3.6) se muestran a continuación:
CURRENT_DATE
1 SELECT CURRENT_DATE FECHA FROM DUAL;
15
16. FECHA
---------
10-NOV-12
1.3.7. TO_DATE
Esta función convierte textos en fechas. Como segundo parámetro se utilizan los códigos de formato de
fechas comentados en 2. La sintaxis (1.3.7), ejemplo (1.3.7) y salida (1.3.7) se muestran a continuación:
TO_DATE(fecha, formato)
1 SELECT TO_DATE(’2003/07/09’, ’yyyy/mm/dd’) f1, TO_DATE(’20020315’,
’yyyymmdd’) f2 FROM DUAL;
F1 F2
--------- ---------
09-JUL-03 09-JUL-03
16
17. 2. Tabla de Símbolos
Fechas: En el caso de las fechas se indica el formato de conversión, que es una cadena que puede incluir
estos símbolos (en una cadena de texto):
Símbolo Significado
YY Año en formato de dos cifras
YYY Últimas tres cifras del año
YYYY Año en formato de cuatro cifras
SYYYY igual que el anterior, pero si la fecha es anterior al nacimiento de Cristo el año
aparece en negativo
MM Mes en formato de dos cifras
MON Las tres primeras letras del mes
MONTH Nombre completo del mes
DY Día de la semana en tres letras
DAY Día completo de la semana
DD Día en formato de dos cifras
Q Semestre
WW Semana del año
D Día de la semana (del 1 al 7)
DDD Día del año
AD ó A.D. Indicador de periodo Anno Domini (después de Cristo)
BC ó B.C. Indicador de periodo, antes de Cristo. Aparece en fechas anteriores al año cero (en
español se pone AC)
J Año juliano
RN Método Romano de numeración
AM Indicador AM
PM Indicador PM
HH12 Hora de 1 a 12
HH24 Hora de 0 a 23
MI Minutos (0 a 59)
SS Segundos (0 a 59)
SSSS Segundos desde medianoche
/., Posición de los separadores
Números: Para convertir números a textos se usa está función cuando se desean características especiales.
En ese caso en el formato se pueden utilizar estos símbolos:
Símbolo Significado
9 Posición del número
0 Posición del número (muestra ceros)
S En esa posición se coloca el signo del número (tanto el negativo como el positivo)
$ Formato dólar
L Símbolo local de la moneda
C Símbolo internacional de moneda (según la configuración local de Oracle)
D Posición del símbolo decimal (en español, la coma)
G Posición del separador de grupo (en español el punto)
RN Numeración romana en mayúsculas
rn Numeración romana en minúsculas
PR Se muestran los negativos entre símbolos <y >
. Posición del decimal
, Posición del separador de miles
17