Sei sulla pagina 1di 8

1.-Funciones SQL de una sola fila.

2.-Funciones carácter
3.-Funciones numéricas
4.-Trabajando con fechas
5.-Funciones de fecha

1. Funciones SQL de una sola fila

Las funciones SQL son una característica muy potente del lenguaje SQL y pueden ser usadas
para hacer lo siguiente:

 Realizar cálculos con los datos


 Modificar datos particulares
 Manipular la salida para grupos de filas
 Formatear la salida de números y fechas
 Convertir los tipos de datos de las columnas

Las funciones SQL pueden tomar varios argumentos y siempre retornan un solo valor. Hay dos tipos
de funciones SQL, las funciones de fila única que por cada fila retornan un resultado y las
funciones de fila múltiple que devuelven un resultado por juego de registros. En este documento
se cubren las funciones de fila única que operan sobre cada una de las filas y retornan un valor por
cada fila. Hay diferentes tipos de funciones de fila única y se cubrirán las siguientes:

 Carácter
 Numero
 Fecha
 Conversión
 General

Funciones de fila única. Single-row functions

 Manipulan datos
 Aceptan argumentos y devuelven un valor
 Actúan en cada fila que es retornada
 Devuelven un resultado por fila
 Pueden modificar el tipo de datos
 Se pueden anidar
 Aceptan argumentos que pueden ser una columna o una expresión

Las funciones de fila única son usadas para manipular datos, aceptan uno o mas argumentos y
siempre devuelven un valor por cada fila que es retornada en la query. Los argumentos pueden ser
uno de los siguientes:

 Constante facilitada por el usuario


 Valor de un variable
 Nombre de una columna
 Una expresión
Las características de las funciones de fila única incluyen:

 Actuar sobre cada fila que es retornada en la query.


 Retornando un resultado por fila
 Con la posibilidad de retornar un tipo de datos distinto al que ha sido referenciado
 Posibilidad de recibir uno o más argumentos
 Pueden ser usados en las clausulas SELECT, WHERE y en el ORDER BY. Pueden ser anidadas

Sintaxis: function_name arg1, arg2


Tipos de funciones de fila única
 Carácter
 Numéricas
 General
 Conversión
 Fecha

Carácter. Aceptan de entrada valores carácter y pueden devolver valores carácter y numéricos.
Numéricas. La entrada y salida siempre son valores de tipo number.
Conversión. Convierte el tipo de datos de uno de entrada a otro distinto de salida.
Fecha. Opera sobre valores DATE y todas las funciones devuelven DATE excepto
MONTHS_BETWEEN que devuelve NUMBER
General. NVL, NVL2, NULLIF, COALESCE, CASE, DECODE

2.-Funciones carácter

Las funciones de fila única carácter las podemos dividir en funciones de conversión y funciones de
manipulación.

Funciones de conversión case-sensitive:

 LOWER
 UPPER
 INITCAP

Funciones de manipulación de caracteres:

 CONCAT
 SUBSTR
 LENGTH
 INSTR
 LPAD | RPAD
 TRIM
 REPLACE

LOWER (column|expression).- Convierte los caracteres a minúsculas.


LOWER (‘SQL Course’) sql course

SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) =


‘higgins';

UPPER(column|expression).- Convierte los caracteres a mayúsculas.


UPPER(‘SQL Course’) SQL COURSE

INITCAP(column|expression). Convierte el primer carácter a mayúscula y el resto a minúsculas.


INITCAP(‘SQL Course’) Sql Course

CONCAT(column1|expression1,column2|expression2).- Concatena el primer valor carácter al


segundo valor carácter es equivalente al operador de concatenación ||. Esta limitado a dos
parámetros para concatenar.

SUBSTR(column|expression,m[,n]).- Retorna los caracteres desde la posición marcada por el valor


m y con una longitud marcada con el valor n. m es la posición inicial desde donde se van a retornar
los valores. Si n no aparece se retornará hasta el final. Si m es negativo ya no se trata de la posición
lo que hace es mostrar los caracteres indicados con m pero contando desde el final, desde la
derecha. Por ejemplo si pone -3 mostrara los tres últimos caracteres
CERT@ORCL > SELECT PROD_NAME , SUBSTR( PROD_NAME, 3 ) as “3” , SUBSTR( PROD_NAME, 2)
AS “2”, SUBSTR( PROD_NAME, 1) AS “1” FROM PRODUCTS WHERE PROD_NAME IS NOT NULL;
PROD_NAME 3 2 1
————————- ———————– ———————— ————————-
PEPE PE EPE PEPE
JUAN AN UAN JUAN
DANI NI ANI DANI
JON N ON JON
ANE E NE ANE
ANA A NA ANA

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_NAME , SUBSTR( PROD_NAME, 1,2 ) as “1-2″ , SUBSTR(


PROD_NAME, 1, 3) AS “1-3″, SUBSTR( PROD_NAME, 1, 4) AS “1-4″ FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME 1- 1-3 1-4
————————- — — —-
PEPE PE PEP PEPE
JUAN JU JUA JUAN
DANI DA DAN DANI
JON JO JON JON
ANE AN ANE ANE
ANA AN ANA ANA

CERT@ORCL > SELECT PROD_NAME , SUBSTR( PROD_NAME, -3 ) as “-3″ , SUBSTR( PROD_NAME, -


2) AS “-2″, SUBSTR( PROD_NAME, -1, 1) AS “-1″ FROM PRODUCTS WHERE PROD_NAME IS NOT
NULL;
PROD_NAME -3 -2 -1
————————- — — –
PEPE EPE PE E
JUAN UAN AN N
DANI ANI NI I
JON JON ON N
ANE ANE NE E
ANA ANA NA A

6 filas seleccionadas.

LENGTH(column|expression).- Retorna la longitud, el número de caracteres de la expresión o


valor.
CERT@ORCL > SELECT PROD_NAME, LENGTH( PROD_NAME ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME LENGTH(PROD_NAME)
————————- —————–
PEPE 4
JUAN 4
DANI 4
JON 3
ANE 3
ANA 3

6 filas seleccionadas.

INSTR(column|expression,’string’, [,m], [n] ).- Retorna la posición numérica de un carácter o


cadena. De manera opcional se le puede fijar la posicion “m” desde donde empezar a buscar y el
numero de ocurrencias “n”. Por defecto m y n estan a 1 lo que significa que empiece a buscar
desde el principio y que reporte la primera ocurrencia dentro de la cadena.
CERT@ORCL > SELECT PROD_NAME, INSTR( PROD_NAME, ‘A’ ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME INSTR(PROD_NAME,’A’)
————————- ——————–
PEPE 0
JUAN 3
DANI 2
JON 0
ANE 1
ANA 1

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_NAME, INSTR( PROD_NAME, ‘A’,3 ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME INSTR(PROD_NAME,’A’,3)
————————- ———————-
PEPE 0
JUAN 3
DANI 0
JON 0
ANE 0
ANA 3

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_NAME, INSTR( PROD_NAME, ‘A’,1,2 ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME INSTR(PROD_NAME,’A’,1,2)
————————- ————————
PEPE 0
JUAN 0
DANI 0
JON 0
ANE 0
ANA 3

6 filas seleccionadas.

LPAD(column|expresion, n, ‘string’).- Completa por la izquierda hasta n caracteres con los


caracteres ‘string’
CERT@ORCL > SELECT PROD_ID, LPAD(PROD_NAME, 4, ‘-‘) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_ID LPAD
———- —-
1 PEPE
2 JUAN
3 DANI
6 -JON

RPAD(column|expresion, n, ‘string’).- Completa por la derecha hasta n caracteres con los


caracteres ‘string’
CERT@ORCL > SELECT PROD_ID, RPAD(PROD_NAME, 4, ‘-‘) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_ID RPAD
———- —-
1 PEPE
2 JUAN
3 DANI
6 JON-

TRIM(leading|trailing|both, trim_character FROM trim_source).- Te permite recortar caracteres


tanto por delante como por detrás. trim_character es el carácter a buscar para recortar (por
delante o detrás o ambos) Si no se pone carácter a buscar sirve para eliminar blancos (por delante
o detrás o ambos)
CERT@ORCL > SELECT PROD_ID, TRIM( leading ‘A’ FROM PROD_NAME ) FROM PRODUCTS
WHERE PROD_NAME IS NOT NULL;
PROD_ID TRIM(LEADING’A’FROMPROD_N
———- ————————-
1 PEPE
2 JUAN
3 DANI
6 JON
6 NE
7 NA

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_ID, TRIM( TRAILING ‘A’ FROM PROD_NAME ) FROM PRODUCTS
WHERE PROD_NAME IS NOT NULL;
PROD_ID TRIM(TRAILING’A’FROMPROD_
———- ————————-
1 PEPE
2 JUAN
3 DANI
6 JON
6 ANE
7 AN

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_ID, TRIM( BOTH ‘A’ FROM PROD_NAME ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_ID TRIM(BOTH’A’FROMPROD_NAME
———- ————————-
1 PEPE
2 JUAN
3 DANI
6 JON
6 NE
7N

6 filas seleccionadas.

CERT@ORCL > SELECT PROD_ID, TRIM( ‘A’ FROM PROD_NAME ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_ID TRIM(‘A’FROMPROD_NAME)
———- ————————-
1 PEPE
2 JUAN
3 DANI
6 JON
6 NE
7N

6 filas seleccionadas.
Si no se especifica caracter se eliminan los espacios en blanco y si no se dice si por delante o detras
lo por ambos.

CERT@ORCL > SELECT TRIM(‘ Juanito Lopez ‘) from dual;


TRIM(‘JUANITO
————-
Juanito Lopez

REPLACE(text, search_string, replacement_string).- Busca una cadena dentro de una columna o


cadena de caracteres y la sustituye por la que se le pasa.
CERT@ORCL > SELECT PROD_NAME, REPLACE( PROD_NAME, ‘E’, ‘A’ ) FROM PRODUCTS WHERE
PROD_NAME IS NOT NULL;
PROD_NAME REPLACE(PROD_NAME,’E’,’A’
————————- ————————-
PEPE PAPA
JUAN JUAN
DANI DANI
JON JON
ANE ANA
ANA ANA

6 filas seleccionadas.

Las funciones que son 100% compatibles con el estandar SQL:2003 son UPPER, LOWER, TRIM,
LENGTH, SUBSTR, INSTR.

Funciones de manipulacion de caracteres:

CONCAT(‘Hello’, ‘World’) HelloWorld


SUBSTR(‘HelloWorld’,1,5) Hello
LENGTH(‘HelloWorld’) 10
INSTR(‘HelloWorld’, ‘W’) 6
LPAD(salary,10,’*’) *****24000
RPAD(salary, 10, ‘*’) 24000*****
REPLACE (‘JACK and JUE’,’J’,’BL’) BLACK and BLUE
TRIM(‘H’ FROM ‘HelloWorld’) elloWorld

3.-Funciones numéricas

Las funciones numéricas aceptan como entrada tipo de datos number y devuelven number.

ROUND.- Redondea el valor a un decimal especifico. ROUND(45.926, 2) –> 45.93


TRUNC.- Trunca el valor a un decimal especifico. TRUNC(45.926, 2) –> 45.92
MOD.- Retorna el resto de una división. MOD(1600, 300) –> 100

ROUND.- Redondea la columna o expresion a n decimales. Si no hay n, no habrá decimales. Si n es


negativo redondeará hacia la zona entera y no habrá decimales. ROUND(column|expresion, n ). La
función ROUND tambien puede ser usada con tipos de datos FECHA.
CERT@ORCL > SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923), ROUND(45.923,-1)
FROM DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923) ROUND(45.923,-1)
————— ————— ————- —————-
45,92 46 46 50

TRUNC.- Trunca la columna, expresión o el valor a n decimales. Si falta el segundo elemento, es


truncado a 0 decimales. Si n es negativo trunca la parte entera. Tanto ROUND como TRUNC son
validas para fechas. TRUNC(column|expression , n)
CERT@ORCL > SELECT TRUNC(45.923,2), TRUNC(45.923,0), TRUNC(45.923), TRUNC(45.923,-1)
FROM DUAL;
TRUNC(45.923,2) TRUNC(45.923,0) TRUNC(45.923) TRUNC(45.923,-1)
————— ————— ————- —————-
45,92 45 45 40

MOD.- MOD(m,n) Saca el resto de una división, del primer elemento entre el segundo, columnas o
expresiones. Es usado para ver si un valor es par o impar. Par es igual 0 e impar es igual a 1.
CERT@ORCL > select MOD(452525454,2) FROM DUAL;
MOD(452525454,2)
—————-
0

CERT@ORCL > select MOD(4525254543,2) FROM DUAL;


MOD(4525254543,2)
—————–
1

4.-Trabajando con fechas

Las fechas internamente son almacenadas en formato numérico de la siguiente manera:

SIGLO AÑO MES DIA HORAS MINUTOS SEGUNDOS

19 87 06 17 17 10 43

El display por defecto y para los inputs es: DD-MM-RR

Las fechas validas en Oracle van desde el 1 de enero de 4712 a.c hasta el 31 de diciembre del 9999
d.c

SELECT last_name, hire_date FROM employees WHERE hire_date < ’01-FEB-88′;


El formato RR va desde el año 0 al 49 del siglo actual y desde el año 50 al 99 del siglo anterior al
actual. Por lo tanto se puede usar para dos siglos distintos. Si se inserta un registro tiene datos
fecha el siglo lo toma de la funcion SYSDATE que toma la hora y la fecha actual del servidor donde
reside la BD. El tipo de datos DATA usa 2 bytes para almacenar el año, uno para el siglo y otro para
el año. La función CURRENT_DATE devuelve la fecha y la hora con el TIME ZONE.

Operaciones aritméticas con fechas


DATE + NUMBER = DATE
DATE – NUMBER = DATE
DATE -DATE = Numero de dias
DATE +- NUMBER/24 = Suma o resta el numero de horas

CERT@ORCL > alter session set nls_date_format = ‘DD-MON-RRRR HH24:MI:SS';


Sesion modificada.

CERT@ORCL > SELECT SYSDATE, SYSDATE+1, SYSDATE-1, SYSDATE + 1/24, SYSDATE – SYSDATE+10
FROM DUAL;
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS FROM employees WHERE department_id =
90;
Fecha menos fecha da como resultado el numero de dias entre ambas fechas y si lo dividimos entre
siete, el numero de semanas que llevan trabajando los empleados del departamento 90.

5.-Funciones de fecha

MONTHS_BETWEEN.- Numero de meses entre dos fechas.


ADD_MONTHS.- Añadir meses a la fecha actual o especificada.
NEXT_DAY.- Dia siguiente al especificado.
LAST_DAY.- Ultimo dia del mes.
ROUND.- Redondea la fecha.
TRUNC.- Trunca la fecha.

Todas las funciones de FECHA devuelven tipos de datos DATE salvo la función MONTHS_BETWEEN
que devuelve un NUMBER. El resultado puede ser positivo o negativo. MONTHS_BETWEEN(date1,
date2) devuelve el numero de meses entre una fecha y otra.

ADD_MONTHS.- ADD_MONTHS(date, n) Añade n al numero de meses a la fecha. El valor puede ser


negativo.
CERT@ORCL > SELECT SYSDATE, ADD_MONTHS(SYSDATE, 4), ADD_MONTHS(SYSDATE, -4) FROM
DUAL;
SYSDATE ADD_MONTHS( ADD_MONTHS(
———– ———– ———–
24-JUL-2014 24-NOV-2014 24-MAR-2014

NEXT_DAY.- NEXT_DAY(DATE, ‘CHAR’) Encuentra el dia de la semana siguiente a la fecha propuesta


en ‘char’ puede ser un numero del 1 al 7, siendo los días de la semana. De esta manera se puede ver
que día de la semana era una fecha. El 12 de marzo de 1976 fue un viernes.
CERT@ORCL > SELECT NEXT_DAY(’12-MAR-1976′, 6) FROM DUAL;
NEXT_DAY(‘1
———–
13-MAR-1976

CERT@ORCL > SELECT SYSDATE, NEXT_DAY(SYSDATE, 5), NEXT_DAY(SYSDATE, 4) FROM DUAL;


SYSDATE NEXT_DAY(SY NEXT_DAY(SY
———– ———– ———–
24-JUL-2014 25-JUL-2014 31-JUL-2014

LAST_DAY.- LAST_DAY(date) Encuentra el ultimo día del mes en la fecha facilitada.


CERT@ORCL > SELECT LAST_DAY(’12-FEB-1976′) FROM DUAL;
LAST_DAY(’12-FEB-197
——————–
29-FEB-1976 00:00:00

ROUND.- ROUND(date, [‘fmt’]) Devuelve la fecha redondeada a la unidad especificada en el


formato ‘fmt’. Si el modelo de formato es omitido la fecha es redondeada al día mas cercano.
CERT@ORCL > SELECT SYSDATE, ROUND(SYSDATE) FROM DUAL;
SYSDATE ROUND(SYSDATE)
——————– ——————–
24-JUL-2014 23:31:14 25-JUL-2014 00:00:00

TRUNC.- TRUNC(date, [‘fmt’]) Devuelve la fecha truncada con la porción del día especificada en el
formato ‘fmt’. Si el modelo de formato es omitido la fecha es truncada al día actual.
CERT@ORCL > SELECT SYSDATE, TRUNC(SYSDATE) FROM DUAL;
SYSDATE TRUNC(SYSDATE)
——————– ——————–
24-JUL-2014 23:41:47 24-JUL-2014 00:00:00

Potrebbero piacerti anche