0% encontró este documento útil (0 votos)
23 vistas14 páginas

SQL Chema Tema

Este documento describe los elementos básicos del lenguaje SQL, incluyendo sentencias como SELECT, INSERT, UPDATE y DELETE para manipular datos, y sentencias como CREATE, ALTER y DROP para definir la estructura de la base de datos. También explica conceptos como tablas, columnas, funciones, operadores y cláusulas.

Cargado por

Spytos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas14 páginas

SQL Chema Tema

Este documento describe los elementos básicos del lenguaje SQL, incluyendo sentencias como SELECT, INSERT, UPDATE y DELETE para manipular datos, y sentencias como CREATE, ALTER y DROP para definir la estructura de la base de datos. También explica conceptos como tablas, columnas, funciones, operadores y cláusulas.

Cargado por

Spytos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

SQL

1. NOTAS PREVIAS: FORMATO DE LAS INSTRUCCIONES EN LOS APUNTES

En este manual en muchos apartados se indica la sintaxis de sentencias y cláusulas. Esta sintaxis sirve
para aprender a utilizar dichas sentencias y cláusulas, es decir, indica la forma en la que deben escribirse.

Ejemplo de sintaxis:

SELECT {*| Columnas | Expresiones}


FROM tabla1 [, tabla2 [,…]];

Otras veces se describen códigos de ejemplo. Ejemplo:

SELECT nombre FROM cliente;

Los ejemplos sirven para escenificar una instrucción concreta, la sintaxis se utiliza para indicar la forma
de utilizar una sentencia o cláusula.

Para indicar la sintaxis de una sentencia se usan símbolos especiales. Los símbolos que utiliza este libro
(de acuerdo con la sintaxis que se utiliza normalmente en cualquier documentación de este tipo) son:

• PALABRA: Cuando en la sintaxis se utiliza una palabra en negrita y en azul, significa que es una
palabra que hay que escribir literalmente (aunque sin importar si en mayúsculas o minúsculas).

• Texto: El texto que aparece en color normal sirve para indicar que no hay que escribirlo
literalmente, sino que se refiere a un tipo de elemento que utiliza en la sentencia, por ejemplo,
una tabla, un nombre de columna, etc. Ejemplo:

SELECT columna FROM tabla;

Aquí el texto columna hay que cambiarlo por un nombre concreto de columna (nombre,
apellidos,...), al igual que tabla se refiere a un nombre de tabla concreto.

• [ ] (corchetes). Los corchetes sirven para encerrar texto que no es obligatorio en la instrucción,
es decir, para indicar una parte opcional.

• | (barra vertical). Este símbolo (|), la barra vertical, indica opción. Las palabras separadas con
este signo indican que se debe elegir una de entre todas las palabras.

• ... (puntos suspensivos) Indica que se puede repetir el texto anterior en la instrucción
continuamente (significaría, y así sucesivamente)

• {} (llaves) Las llaves sirven para indicar opciones mutuamente exclusivas pero obligatorias. Es
decir, opciones de las que sólo se puede elegir una opción, pero de las que es obligado elegir
una.
Ejemplo:

SELECT {*| Columna | Expresión}


FROM tabla1 [, tabla2 [,…]];

El ejemplo anterior indicaría que se debe elegir obligatoriamente el asterisco o un nombre de columna o
una expresión. Si las llaves del ejemplo fueran corchetes, entonces indicarían que incluso podría no
aparecer ninguna opción. Por otro lado, es obligatorio indicar al menos una tabla desde la que consultar,
pero puedes indicar dos o más tablas.

2. INTRODUCCIÓN
2.1. DEFINICIÓN

SQL es el lenguaje fundamental de los SGBD relacionales. Se trata de uno de los lenguajes más
utilizados de la historia de la informática. Es sin duda el lenguaje fundamental para manejar una
base de datos relacional.

SQL es un lenguaje declarativo en lo que lo importante es definir qué se desea hacer, por encima de
cómo hacerlo (que es la forma de trabajar de los lenguajes de programación de aplicaciones como C
o Java). Con este lenguaje se pretendía que las instrucciones se pudieran escribir como si fueran
órdenes humanas; es decir, utilizar un lenguaje lo más natural posible. De ahí que se le considere un
lenguaje de cuarta generación.

Se trata de un lenguaje que intenta agrupar todas las funciones que se le pueden pedir a una base
de datos, por lo que es el lenguaje utilizado tanto por administradores como por programadores o
incluso usuarios avanzados.

2.2. HISTORIA

El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un modelo de
datos relacional para grandes bancos de datos compartidos". Ese libro dictaría las directrices de las
bases de datos relacionales. Apenas dos años después IBM (para quien trabajaba Codd) utiliza las
directrices de Codd para crear el Standard English Query Language (Lenguaje Estándar Inglés para
Consultas) al que se le llamó SEQUEL. Más adelante se le asignaron las siglas SQL (Standard Query
Language, lenguaje estándar de consulta) aunque en inglés se siguen pronunciando secuel. En
español se pronuncia esecuele.
En 1979 Oracle presenta la primera implementación comercial del lenguaje. Poco después se
convertía en un estándar en el mundo de las bases de datos avalado por los organismos ISO y ANSI.
En el año 1986 ANSI LO toma como lenguaje estándar de los SGBD relacionales. Un año después lo
adopta ISO, lo que convierte a SQL en estándar mundial como lenguaje de bases de datos
relacionales.

La última versión es el del año 2016 (SQL:2016).

2.3. PROCESO DE EJECUCIÓN DE INSTRUCCIONES SQL

El proceso es el siguiente:
• Se comprueba que la sintaxis de la sentencia es correcta.
• Se comprueba consultado el diccionario de datos que los metadatos (nombre de columnas,
nombre de tablas, etc.) de la sentencia son correctos.
• Se optimiza la sentencia a fin de consumir los mínimos recursos posibles.
• Se ejecuta la sentencia y se muestra el resultado de la misma.

2.4. NORMAS DE ESCRITURA

• En SQL no se distingue entre mayúsculas y minúsculas.


• Las instrucciones finalizan con el signo de punto y coma.
• Cualquier comando SQL (SELECT, INSERT,...) puede ser partidos por espacios o saltos de línea
antes de finalizar la instrucción.
• Se pueden tabular líneas para facilitar la lectura si fuera necesario.
• Los comentarios en el código SQL comienzan por /* y terminan por */ (excepto en algunos
SGBD).

2.5. SGBDR ORACLE

La razón de utilizar Oracle como base de trabajo se debe a su respeto por SQL estándar (aunque
desde luego no tan estricto como PostgreSQL), es decir, que no es excesivamente diferente; pero
fundamentalmente por ser el SGBD de referencia más importante desde hace ya muchos años. De
hecho, lo que Oracle aporta de novedoso en cada versión, acaba formando parte del estándar
futuro.

3. ELEMENTOS DEL LENGUAJE SQL

El código SQL consta de los siguientes elementos:


• Sentencias. Las distintas instrucciones que se pueden realizar desde SQL:
o SELECT. Se trata del comando que permite realizar consultas sobre los datos de la base
de datos. Obtiene datos de la base de datos. A esta parte del lenguaje se la conoce como
DQL (Data Query Language, Lenguaje de consulta de datos); pero es parte del DML del
lenguaje.
o DML, Data Manipulation Language (Lenguaje de manipulación de datos). Además de
consultar datos (DQL) permite modificar filas (registros) de la base de datos. Lo forman
las instrucciones INSERT, UPDATE, MERGE y DELETE.
o DDL, Data Definition Language (Lenguaje de definición de datos). Permiten crear y
modificar la estructura de las tablas de la base de datos. Lo forman las instrucciones
CREATE, ALTER, DROP, RENAME y TRUNCATE.
o DCL, Data Control Language (Lenguaje de control de datos). Administran los derechos y
restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.
o DTL (Instrucciones de control de transacciones). Permiten confirmar o deshacer las
modificaciones realizadas por las instrucciones DML. Lo forman las instrucciones
ROLLBACK y COMMIT. Se las considera parte del DML.
• Cláusulas. Son palabras especiales que permiten modificar el funcionamiento de una sentencia
(WHERE, ORDER BY, etc.)
• Operadores. Permiten crear expresiones complejas. Pueden ser aritméticos (+,-,*,/,...) lógicos (>,
<, !=,<>, AND, OR, etc.)
• Funciones. Para conseguir valores complejos (SUM(), DATE(), etc.)
• Literales. Valores concretos para las consultas: números, textos, caracteres, etc. Ejemplos: 2,
12.34, 'Avda Cardenal Cisneros'
• Metadatos. Obtenidos de la propia base de datos (es decir, nombre de columnas, nombre de
tablas, etc.)

4. DQL: CONSULTA SENCILLA DE DATOS


4.1. SENTENCIA SELECT
En este punto estudiaremos como realizar consultas sencillas sobre la base de datos. Veamos la
sintaxis de la sentencia SELECT.

SELECT {*| ColumnasExpresiones}


FROM tabla1 [, tabla2 [,…]];
donde:

• FROM: cláusula que permite indicar la tabla o tablas donde vamos a consultar los datos.
• tabla n: tablas de la base de datos.
• *: para indicar que se quieren seleccionar todas las columnas de la/s tablas.
• columnasExpresiones: tiene a su vez esta sintáxis:

[DISTINCT] {col1 | exp1} [ [AS] alias] [,{col2 | exp2} [ [AS] alias] [,…] ]

donde:

o DISTINCT: si se indica en el resultado no saldrán tuplas repetidas.


o col n: es una columna de la tabla.
o exp n. Puede ser:
▪ expresión aritmética:

operando operador aritmético operando


(columna o valor) (+, -, *, /, …) (columna o valor)

La prioridad de esos operadores es la normal: tienen más


prioridad la multiplicación y división, después la suma y la resta.
En caso de igualdad de prioridad, se realiza primero la operación
que esté más a la izquierda. Como es lógico se puede evitar
cumplir esa prioridad usando paréntesis; el interior de los
paréntesis es lo que se ejecuta primero.

▪ expresión no aritmética: igual que la anterior pero el operador no es


aritmético (por ejemplo, el operador concatenar (||)).
▪ funciones: función(columna/s), por ejemplo, UPPER(apellido) devolvería el
contenido de la columna apellido en mayúscula.
▪ Etc.

Ejemplos:

/* Selección de todas las columnas de todos los registros de la tabla clientes */


SELECT * FROM Clientes;
/* Selección de algunas columnas*/
SELECT nombre, apellido1, apellido2 FROM Clientes;

/*Operador aritmético*/
SELECT nombre, precio,precio*1.16 FROM articulos;

/*Alias*/
SELECT nombre, precio, precio*1.16 AS precio_con_iva
FROM articulos;

/*Operador no aritmético, concatenación*/


SELECT tipo, modelo, tipo || '-' || modelo "Clave Pieza"
FROM piezas;

/*Los tipos de piezas sin repeticiones (sólo mostraría AR y


BI una vez)*/
SELECT DISTINCT tipo
FROM piezas;

/*Los tipos de piezas con repeticiones y en minúscula*/


SELECT lower(tipo)
FROM piezas;

4.2. CLÁUSULA WHERE

4.2.1. Sintáxis y predicados


Hasta ahora hemos filtrado por columnas, indicando a continuación de SELECT la o las columnas
que se quieren obtener. Con la cláusula WHERE se indica la condición que debe cumplir cada tupla
para aparecer en el resultado (filtra las tuplas). Sintaxis:

[WHERE condición/es]
donde condición puede ser:

• Predicado de comparación:
Operando operador de comparación operando
(columna o expresión) (>, <, >=, <=, =, <>, !=) (columna, valor o
expresión)

Ejemplo:
/*Obtiene todos los tipos y modelos para los que precio es mayor a 3*/
SELECT Tipo, Modelo FROM Pieza
WHERE Precio>3;

• Predicado BETWEEN:
Columna BETWEEN valor1 AND valor2

Obtenemos las tuplas para las que el valor de la columna indicada está en el rango de
valores indicados por valor1 y valor2.
Ejemplo:
/*Obtiene los tipos, modelos y precios de aquellas piezas cuyo precio sea mayor o
igual a 3 y menor o igual a 8*/
SELECT tipo, modelo, precio FROM piezas
WHERE precio BETWEEN 3 AND 8;

• Predicado IN:
Columna IN(valor1, valor2, …)

Obtenemos las tuplas para las que el valor de la columna indicada está en la lista de valores.

Ejemplo:
/*Obtiene los tipos, modelos y precios de aquellas piezas cuyos precios sean 3, 5 u
8*/
SELECT tipo, modelo, precio FROM piezas
WHERE precio IN (3, 5, 8);

• Predicado LIKE:
Columna LIKE ‘cadena’

Obtenemos las tuplas para las que columna cumple la expresión indicada en cadena. En
‘cadena’ pueden usarse los comodines % y _.
o % hace referencia a una serie cualquiera de caracteres.
o _ hace referencia a un carácter cualquiera.

Ejemplo:

/* Selecciona nombres que empiecen por S */


SELECT nombre FROM personas WHERE nombre LIKE 'S%';

/*Selecciona las personas cuyo apellido sea Sanchez, Senchez, Stnchez,...*/


SELECT apellido1 FROM Personas WHERE apellido1
LIKE 'S_nchez';

Muchas veces es equivalente usar el operador = y el LIKE con cadenas, pero se recomienda
acostumbrarse a usar siempre LIKE para cadenas y el operador = para números ya que con
el operador = no funcionan los comodines % y _.

• Predicado IS NULL:
Columna IS NULL

Obtenemos las tuplas para las que el valor de columna es nulo.

Ejemplo:

/*Obtiene el nombre y apellido de las personas para las que teléfono es nulo (no
está informado)*/
SELECT nombre, apellidos FROM personas
WHERE telefono IS NULL;
4.2.2. Predicados NOT

Los predicados BETWEEN, IN, LIKE Y IS NULL tienen sus correspondientes predicados opuestos,
usando la palabra NOT.

• NOT BETWEEN: Obtenemos las tuplas para las que el valor de la columna indicada NO está
en el rango de valores indicados por valor1 y valor2.
• NOT IN: Obtenemos las tuplas para las que el valor de la columna indicada NO está en la lista
de valores
• NOT LIKE: Obtenemos las tuplas para las que columna NO cumple la expresión indicada en
cadena.
• IS NOT NULL: Obtenemos las tuplas para las que el valor de columna NO es nulo.

Ejemplo:
/*Obtiene los tipos, modelos y precios de aquellas piezas cuyos precios no sean 3, 5 ni 8*/
SELECT tipo, modelo, precio FROM piezas
WHERE precio NOT IN (3, 5, 8);

/*Obtiene el nombre y apellido de las personas que tengan informado el campo teléfono*/
SELECT nombre, apellidos FROM personas
WHERE telefono IS NOT NULL;

4.2.3. Varias condiciones

Cuando hay que indicar varias condiciones se deben usar los operadores AND u OR:

• AND: Devuelve verdadero si las expresiones a su izquierda y derecha son ambas


verdaderas.
• OR: Devuelve verdadero si cualquiera de las dos expresiones a izquierda y derecha del
OR, son verdaderas.

Ejemplos:

/* Obtiene a las personas de entre 25 y 50 años*/


SELECT nombre, apellido1,apellido2 FROM personas
WHERE edad>=25 AND edad<=50;

/*Obtiene a la gente de más de 60 años o de menos de 20*/


SELECT nombre, apellido1,apellido2 FROM personas
WHERE edad>60 OR edad<20;

4.3. CLÁUSULA ORDER BY

El orden inicial de los registros obtenidos por un SELECT no es más que el orden en el que fueron
introducidos. Para ordenar en base a criterios más interesantes, se utiliza la cláusula ORDER BY. Sirve
por lo tanto para ordenar las tuplas devueltas.
En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se ordena primero por
el primer campo de la lista, si hay coincidencias por el segundo, si ahí también las hay por el tercero,
y así sucesivamente.

Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras significan
ordenar ascendentemente (de la A a la Z, de los números pequeños a los grandes) o
descendentemente (de la Z a la A, de los números grandes a los pequeños) respectivamente.

Sintaxis:

[ORDER BY {col1 | expre1} [ASC | DESC] [, {col2 |exp2} [ASC | DESC]] [,...] ]
Ejemplo:

/*Muestra todos los empleados ordenado primero por edad y para los que tengan la misma
edad ordenados por sueldo*/
SELECT * FROM EMPLE
ORDER BY EDAD, SUELDO DESC;

4.4. FUNCIONES

Todos los SGBD implementan funciones para facilitar la creación de consultas complejas. Esas
funciones dependen del SGBD que utilicemos. Las que aquí se comentan son algunas de las que se
utilizan con Oracle.

Todas las funciones devuelven un resultado que procede de un determinado cálculo. La mayoría de
funciones precisan que se les envíe datos de entrada (parámetros o argumentos) que son necesarios
para realizar el cálculo de la función. Este resultado, lógicamente depende de los parámetros
enviados. Dichos parámetros se pasan entre paréntesis. La sintaxis para realizar una llamada (usarla)
a una función es:

nombreFunción[(parámetro1[, parámetro2,...])]
Si una función no precisa parámetros (como SYSDATE) no hace falta colocar los paréntesis.

Hay dos tipos de funciones:


• Funciones que operan con datos de una única fila. Devolverán un resultado por cada fila que
devuelva la consulta. Estas son las funciones que estudiaremos en este apartado.
• Funciones que operan con datos de varias filas diferentes (funciones de agrupación).
Devolverán un único resultado, salvo que se use la cláusula GROUP BY, en cuyo caso
devolverá un resultado por cada grupo (ya las estudiaremos en las consultas complejas).

Oracle proporciona una tabla llamada dual con la que se permiten hacer pruebas. Esa tabla tiene un
solo campo (llamado DUMMY) y una sola fila de modo que es ideal para hacer pruebas con
funciones. Por ejemplo la consulta SELECT SQRT(5) FROM DUAL; mostrará una celda con el
contenido de ese cálculo (la raíz cuadrada de 5).

En los siguientes apartados se describen algunas de las funciones más interesantes distinguiendo
entre funciones matemáticas, de cadenas de caracteres, de listas, de manejo de nulos y de manejo
de fechas.
4.4.1. Funciones matemáticas

Función Descripción
ROUND(n, decimales) Redondea el número al siguiente número con el número de decimales
indicado más cercano. ROUND(8.239,2) devuelve 8.24.
TRUNC(n, decimales) Los decimales del número se cortan para que sólo aparezca el número de
decimales indicado.
CEIL(n) Devuelve el techo de n: el menor de los enteros mayores a n.
FLOOR(n) Devuelve el suelo de n: el mayor de los enteros menores a n.
MOD(m,n) Devuelve el resto de la división entera de m entre n.
POWER(m,exponente) Devuelve la m elevado a exponente.
SQRT(n) Devuelve la raíz cuadrada de n.
SIGN(valor) Devuelve 1 si n es positivo, cero si vale cero y -1 si es negativo.
ABS(n) Devuelve el valor absoluto de n

4.4.2. Funciones de cadenas de caracteres

Función Descripción
LOWER(texto) Convierte el texto a minúsculas.
UPPER(texto) Convierte el texto a mayúsculas.
INITCAP(texto) Coloca la primera letra de cada palabra del texto en mayúsculas.
RTRIM(texto) Elimina los espacios a la derecha del texto (si los tiene).
LTRIM(texto) Elimina los espacios a la izquierda del texto (si los tiene).
TRIM(texto) Elimina los espacios en blanco a la izquierda y la derecha del
texto.
TRIM(caracter FROM texto) Elimina del texto los caracteres indicados siempre que estén al
principio o al final de texto. Por ejemplo TRIM('h' FROM nombre)
elimina las haches de la columna nombre que estén a la izquierda
y a la derecha.

SUBSTR(texto,n[,m]) 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).
LENGTH(texto) Obtiene la longitud (número de caracteres) del texto.
CONCAT(texto1, texto2) : Concatena texto2 a texto1 sin espacios entre ambos.
INSTR(texto, textoBuscado Obtiene la posición en la que se encuentra el texto buscado en el
[,posInicial [, nAparición]]) texto inicial. Se puede empezar a buscar a partir de una posición
inicial concreta e incluso indicar el número de aparición del texto
buscado del que se quiere obtener la posición.

Ejemplo, si buscamos la letra a y ponemos 2 en nAparición,


devuelve la posición de la segunda letra a del texto).

Si no lo encuentra devuelve 0.
REPLACE(texto, textoABuscar, Buscar el texto a buscar en un determinado texto y lo cambia por
[textoReemplazo]) el indicado como texto de reemplazo.
Si no se indica texto de reemplazo, entonces está función elimina
el texto a buscar.

Ejemplo 1: select REPLACE('SALA', 'AL', 'LO') from DUAL;


Devuelve SLOA, ya ha reemplazado 'AL' por 'LO'.

Ejemplo 2: select REPLACE('SALA', 'AL', 'LOP') from DUAL;

Devuelve SLOPA, ya ha reemplazado 'AL' por 'LOP'.

TRANSLATE(texto, Función que permite transformar caracteres en un texto (similar a


caracteresACambiar, REPLACE, pero cambiando carácter a carácter). Los
caracteresSustitutivos) caracteresACambiar son los caracteres que se van a cambiar, los
caracteresSustitutivos son los caracteres que reemplazan a los
anteriores. De tal modo que el primer carácter a cambiar se
cambia por el primer carácter sustitutivo, el segundo por el
segundo y así sucesivamente.

Ejemplo 1: SELECT TRANSLATE('prueba','ue','wx') FROM DUAL;

Devuelve prwxba, de tal forma que la u se cambia por la w y la e


por la x.

Ejemplo 2: SELECT TRANSLATE('SALA', 'AL', 'LO') FROM DUAL;

Devuelve SLOL, ya que cada aparición de A la cambia por L y cada


aparición de L por O.

Si la segunda cadena es más corta, los caracteres de la primera


que no encuentran sustituto, se eliminan.

Ejemplo: SELECT TRANSLATE('prueba','ue','w') FROM DUAL;


Devuelve prwba.

LPAD(texto, anchuraMáxima, Rellena el texto a la izquierda con el carácter indicado para ocupar
[caracterDeRelleno]) la anchura indicada.

Si el texto es más grande que la anchura indicada, el texto se


recorta. Si no se indica carácter de relleno se rellenará el espacio
marcado con espacios en blanco.

Ejemplo: LPAD(‘Hola‘,10,‘-‘)
Da como resultado:
------Hola

RPAD(texto, anchuraMáxima, Similar al anterior, pero a la derecha del texto.


[caracterDeRelleno])
REVERSE(texto) Invierte el texto (le da la vuelta).
ASCII(carácter) Devuelve el código ASCII del carácter indicado.
CHR(n) Devuelve el carácter correspondiente al código ASCII indicado.
4.4.3. Funciones de listas

Función Descripción
GREATEST (valor1,valor2,...) Devuelve el mayor de los valores pasados como parámetros.
LEAST (valor1,valor2,...) Devuelve el menor de los valores pasados como parámetros.

4.4.4. Funciones de manejo de valores nulos

Permiten definir valores a utilizar en el caso de que las expresiones tomen el valor nulo.

Función Descripción
NVL (valor,sustituto) Si valor es NULL devuelve sustituto y si no devuelve valor.
NVL2(valor,sustituto1, sustituto2) Devuelve sustituto1 si valor no es nulo. Si valor es nulo
devuelve sustituto2.

4.4.5. Funciones de manejo de fechas

Función Descripción
SYSDATE Obtiene la fecha y hora actuales.
SYSTIMESTAMP Obtiene la fecha y hora actuales en formato TIMESTAMP (hasta
fracciones de segundo).
ADD_MONTHS(fecha, n) Añade a fecha el número de meses indicado por n.
MONTHS_BETWEEN(fecha1, Obtiene la diferencia en meses de las dos fechas (dará un número
fecha2) decimal, si el día no coincide).
NEXT_DAY(fecha, día) En día se puede indicar ‘Lunes’, ‘Martes’, etc. o 1, 2, etc. y te
devolverá el próximo día indicado a partir de la fecha indicada.
LAST_DAY(fecha) Obtiene el último día del mes de la fecha indicada. Devuelve una
fecha.
EXTRACT(valor FROM fecha) Valor puede ser day (día), month (mes) o year (año) y extrae el día,
mes o año de la fecha indicada (extrae un valor numérico).
GREATEST(fecha1, fecha2,..) Devuelve la fecha más actual la lista.
LEAST(fecha1, fecha2,..) Devuelve la fecha más antigua la lista.
ROUND(fecha, formato) Redondea la fecha según el formato indicado. El formato puede ser:
• 'YEAR': Redondea el año.

select ROUND(TO_DATE ('10-10-2017', 'DD-MM-YYYY'),


'year') from dual;

Devuelve: 01/01/18

select ROUND(TO_DATE ('10-02-2017', 'DD-MM-YYYY'),


'year') from dual;

Devuelve: 01/01/18

• 'MONTH': Redondea el mes.


select ROUND(TO_DATE ('10-10-2017', 'DD-MM-YYYY'),
'month') from dual;

Devuelve: 01/10/17

select ROUND(TO_DATE ('21-10-2017', 'DD-MM-YYYY'),


'month') from dual;

Devuelve: 01/11/17

• 'DD': Redondea el día.

select ROUND(TO_DATE ('17-10-2017 23:05', 'DD-MM-YYYY


HH24:MI'),'DD') from dual;

Devuelve: 18/10/17

select ROUND(TO_DATE ('17-10-2017 11:05', 'DD-MM-YYYY


HH24:MI'),'DD') from dual;

Devuelve: 17/10/17

• 'HH24': Redondea la hora.

select TO_CHAR(ROUND(TO_DATE ('21-10-2017 11:55', 'DD-


MM-YYYY HH24:MI'), 'HH24'), 'DD-MM-YYYY, DAY
HH:MI:SS') from dual;

Devuelve: '21-10-2017 12:00'

select TO_CHAR(ROUND(TO_DATE ('21-10-2017 11:05', 'DD-


MM-YYYY HH24:MI'), 'HH24'), 'DD-MM-YYYY, DAY
HH:MI:SS') from dual;

Devuelve: '21-10-2017 11:00'

TRUNC(fecha, formato) Igual que el anterior pero trunca la fecha en lugar de redondearla.

Hay que tener en cuenta que a los valores de tipo fecha se les pueden sumar números y Oracle
lo interpretaría que esta suma es de días. Si tiene decimales entonces se suman días, horas,
minutos y segundos. Por otro lado, cuando hacemos una diferencia entre dos fechas Oracle
también nos devuelve un número de días entre ambas.
4.4.6. Funciones conversión

Oracle es capaz de convertir datos automáticamente a fin de que la expresión final tenga
sentido. En ese sentido son fáciles las conversiones de texto a número y viceversa. Ejemplos:

SELECT 5+'3' FROM DUAL /*El resultado es 8 */


SELECT 5 || '3' FROM DUAL /* El resultado es 53 */
Pero en diversas ocasiones querremos realizar conversiones explícitas. Dos funciones son las
que destacan para realizar dichas conversiones: TO_CHAR y TO_DATE.

• TO_CHAR:

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 hacer de forma implícita (automática).

En el caso de las fechas se indica el formato de conversión, que es una cadena de texto
que puede incluir estos símbolos y que marcará el aspecto de la fecha al convertirse:

Símbolo Significado
YY Año en formato de dos cifras.
YYYY Año en formato de cuatro cifras.
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.
D Día de la semana (del 1 al 7).
DD Día en formato de dos cifras.
DDD Día del año.
Q Semestre.
WW Semana del año.
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.
/ . ,:;’- Separadores. Donde se pongan estos símbolos aparecerán en
el resultado.

Ejemplo:

SELECT TO_CHAR(SYSDATE, 'DD/MONTH/YYYY, DAY HH:MI:SS')


FROM DUAL ;

Mostraría: 16/AGOSTO /2004, LUNES 08:35:15


• TO_DATE:

Convierte textos en fechas. Como segundo parámetro se utilizan los códigos de formato
de fechas comentados anteriormente.

Ejemplo:

TO_DATE ('10-12-1995', 'DD-MM-YYYY')

Crearía la fecha correspondiente al 10 de diciembre de 1995.

Por ejemplo, si tuviéramos que insertar en una tabla alumnos valores para una columna
de tipo DATE pues ser haría de la siguiente forma:

INSERT INTO alumnos


VALUES (123456, 'Juan Miguel Soler Bakero', 'Murcia', TO_DATE ('10-10-1995', 'DD-MM-
YYYY'), 'Gran Vía, 2, 4A',1,'ESO',15);

También podría gustarte