DP 5 1 Esp Merged

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 98

Programación de

Bases de Datos con SQL


5-1
Funciones de Conversión

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados.
Objetivos
En esta lección se abordan los siguientes objetivos:
• Proporcionar un ejemplo de conversión de tipo de
dato implícita y explícita y una conversión de tipo de
dato implícita
• Explicar el motivo de la importancia, desde una
perspectiva de negocio, de que un lenguaje
tenga capacidades de conversión de datos
incorporadas
• Crear una consulta SQL que aplique correctamente
las funciones de una sola fila TO_CHAR, TO_NUMBER
y TO_DATE para obtener el resultado deseado
Objetivos DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 3
Objetivos
En esta lección se abordan los siguientes objetivos:
• Aplicar el modelo de formato de fecha y/o
caracteres adecuado para producir una salida
deseada
• Explicar y aplicar el uso de YY y RR para devolver el
año correcto como se almacenó en la base de datos
Objetivos
DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 4
Objetiv
• Imagine que tuviera que leer todos los libros de texto
en archivos de texto sin párrafos y sin mayúsculas.
• Sería difícil leerlos.
• Afortunadamente, existen programas de software
disponibles que permiten poner en mayúsculas y aplicar
color al texto, subrayarlos, ponerlos en negrita, centrarlo y
agregar gráficos.
• En el caso de bases de datos, los cambios de formato y
visualización se realizan utilizando funciones de
conversión.
• Estas funciones permiten mostrar los números en la
moneda local, aplicar una gran variedad de formatos a las
fechas, mostrar la hora incluyendo hasta los segundos y
hacer un seguimiento del siglo al que hace referencia una
Objetiv
fecha.
DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 5
Tipos de
• Cuando se crea una tabla para una base de datos,
el programador SQL debe definir qué tipo de dato
se almacenará en cada uno de los campos de la
tabla.
• En SQL, hay diferentes tipos de dato. Estos tipos de
dato definen el dominio de valores que puede incluir
cada columna.
• Para esta lección, utilizará:
– VARCHAR2
– CHAR
– NUMBER
– DATE
Presenter
2019-07-06 20:55:16
--------------------------------------------
En la mayoría de los lenguajes de
programación se necesita que el programador

Tipos de
declare el tipo de dato de cada objeto de
datos. Para los datos almacenados en una
base de datos, el programador SQL
DPS5L1 define un tipo de dato para todas las
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales.columnas
Todos los derechos reservados.
de la base 6
de datos. Los tipos
de dato se tratarán con mayor detalle más
adelante en el curso, pero por ahora
Descripción de Tipos de
• VARCHAR2: se utiliza para datos de caracteres de
longitud variable, incluidos los números, los guiones
y los caracteres especiales.
• CHAR: se utiliza para datos de texto y de caracteres
de longitud fija, incluidos los números, los guiones y
los caracteres especiales.

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 7
Descripción de Tipos de
• NUMBER: se utiliza para almacenar datos numéricos de
longitud variable. No se permiten guiones, texto u
otros datos no numéricos. La moneda se almacena
como tipo de dato numérico.
• DATE: se utiliza para valores de fecha y hora.
Internamente, Oracle almacena las fechas como
números y, por defecto, se muestra información de
DATE como DD-Mes-YYYY (por ejemplo, 23-Oct-
2013).
DPS5L1
Funciones de Conversión
Descripción de Tipos de

Copyright © 2019, Oracle y/o sus filiales. Todos los


derechos reservados.
Presenter
2019-07-06 20:55:16
--------------------------------------------
Implícito: algo que está sobreentendido,
pero que no se expresa directamente.

Conversión de
• Oracle Server puede convertir automáticamente
datos VARCHAR2 y CHAR en tipos de dato NUMBER y
DATE.
• Puede convertir datos de tipo NUMBER y DATE
de nuevo en un tipo de dato CHARACTER.
• A esto se le conoce como Conversión
conversión de datos del Tipo de
implícita

Conversión de Conversión de
DPS5L1 Tipo de Dato Tipo de Dato
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 9
Funciones de Conversión
Presenter
2019-07-06 20:55:16
--------------------------------------------
Explícito: claramente formulado o
definido.

Conversión de
• Aunque esto es una característica útil, siempre es
mejor realizar conversiones de tipo de dato explícitas
para garantizar la fiabilidad en las sentencias SQL.

Conversiones de tipos de dato


implícitas
FROM TO
VARCHAR2 o CHAR NUMBER
VARCHAR2 o CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

DPS5L1
Conversión de
Funciones de Conversión

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 10
Conversión de
• Las cuatro funciones de conversión de tipos de dato
que aprenderá son:
– Convertir un tipo de dato de fecha en tipo de dato de carácter
– Convertir un tipo de dato numérico en tipo de dato de carácter

CONVERSIÓN DE TIPO DE DATO EXPLÍCITA


TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 11
Conversión de Tipo
• Las cuatro funciones de conversión de tipos de dato
que aprenderá son:
– Convertir un tipo de dato de caracteres en tipo de
dato numérico
– Convertir un tipo de dato de caracteres en tipos de dato de
fecha CONVERSIÓN DE TIPO DE DATO EXPLÍCITA
TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 12
Conversión de Datos de
Fecha en Datos de
• Por lo general, es aconsejable que un formato de fecha
se convierta de su formato DD-Mes-YYYY por defecto
en otro formato especificado por el usuario.
• La función que permite llevar esto a cabo es:
• ElTO_CHAR
'modelo decolumn
(date formato'
name,debe estar
'format entre
model you specify')

comillas simples y es sensible a


mayúsculas/minúsculas.
• Separe el valor de fecha del modelo de formato con
una coma.

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 13
Conversión de Datos de
Fecha en Datos de
• Se puede incluir cualquier elemento de formato
de fecha válido.
• Utilice sp para deletrear un número.
• Utilice th para que el número aparezca como un
ordinal. (1º, 2º, 3º y así sucesivamente)
• Utilice un elemento fm para eliminar los espacios
en blanco o eliminar los ceros iniciales de la salida.

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 14
Conversión de Datos de
Fecha en Datos de
• Las tablas muestran YYYY Año completo en números
los diferentes modelos YEAR Año en letra

de formato que se MM Valor de dos dígitos del mes

pueden utilizar. MONTH Nombre completo del mes


MON Abreviatura de tres letras del mes

• Al especificar elementos DY Abreviatura de tres letras del día de la


semana
temporales, tenga en DAY Nombre completo del día de la semana

cuenta que también se DD Día numérico del mes

puede aplicar formato a


DDspth FOURTEENTH
Ddspth Fourteenth

las horas (HH), los ddspth fourteenth

minutos (MI), los DDD o DD o D


HH24:MI:SS AM
Día del año, mes o semana
15:45:32 PM
segundos (SS) y AM o PM. DD "of" MONTH 12 de octubre

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 15
Presenter
2019-07-06 20:55:17

Conversión de Datos de
--------------------------------------------
En el ejemplo 2 se utiliza "fm" para suprimir
los ceros iniciales de la fecha.

Fecha en Datos de
En el ejemplo 3 se agrega "th", etc. para
que el día aparezca como un número
ordinal

Caracteres
• Ejemplos de salida con diferentes modelos
Ejemplos: Salida
SELECT TO_CHAR(hire_date, 'Month dd, YYYY') martes, 07 de
FROM employees; junio de 1994
SELECT TO_CHAR(hire_date, 'fmMonth dd, YYYY') martes, 07 de
FROM employees; junio de 1994
SELECT TO_CHAR(hire_date, 'fmMonth ddth, 7 de junio de
YYYY') 1994
FROM employees;
3 de enero de
1990

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 16
Presenter
2019-07-06 20:55:17

Conversión de Datos de
--------------------------------------------
En el ejemplo 2 se agrega "SP" al formato
de día para especificar la parte de día de la

Fecha en Datos de
fecha.
En el ejemplo 3 se muestra el año deletread
y el texto "de" entre el día y el mes.

Caracteres
Tenga en cuenta que las comillas dobles
son necesarias alrededor del literal de
texto que se va a incluir.

• Ejemplos de salida con diferentes modelos


Ejemplos: Salida
SELECT TO_CHAR(hire_date, 'fmDay ddth Mon, Martes 7 de jun de 1994
YYYY')
FROM employees;
SELECT TO_CHAR(hire_date, 'fmDay ddthsp Martes, siete de junio de
Mon, YYYY') 1994
FROM employees;
SELECT TO_CHAR(hire_date, 'fmDay, ddthsp Martes, siete de junio, mil
"of" Month, Year') novecientos noventa y
FROM employees; cuatro

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 17
Conversión de Datos de
Fecha en Datos de
Caracteres
• Ejemplos de salida con diferentes modelos
para el tiempo:

Ejemplos: Salida
SELECT TO_CHAR(SYSDATE, 'hh:mm') 2:07 AM
FROM dual;
SELECT TO_CHAR(SYSDATE, 'hh:mm pm') 2:07 AM
FROM dual;
SELECT TO_CHAR(SYSDATE, 'hh:mm:ss pm') 2:07:23 AM
FROM dual;

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 18
Conversión de Datos Numéricos
en Datos de Caracteres
• Los números almacenados en la base de datos
no tienen formato.
• Esto significa que no tienen ningún signo/símbolo
de moneda, comas, decimales, ni ningún otro
formato.
• Para agregar formato, en primer lugar debe convertir
el número en un formato de caracteres.
• LaTO_CHAR(number,
función SQL'format
que semodel')
utiliza para convertir un
número en un formato de carácter deseado es:

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 19
Presenter
2019-07-06 20:55:18

Conversión de Datos Numéricos


--------------------------------------------
NOTA: si el número de "9" en el modelo
de formato es menor que el número de

en Datos de Caracteres
dígitos en el número, se
muestra #####, por ejemplo, SELECT
TO_CHAR(24000, '$9,999') devolvería
#######, ya que el modelo de formato
tiene cuatro "9", pero el número

• En la tabla se proporcionado tiene cinco dígitos.

muestran algunos de ELEMENT DESCRIPTION EXAMPLE RESULT

los elementos de
9 Posición numérica (la cantidad 999999 1234
de 9 determina el ancho de
la visualización)

formato que se 0 Muestra los ceros iniciales 099999 001234

pueden utilizar con las


$ Signo de dólar flotante 999999 $ 1234 $
L Símbolo de divisa local flotante L999999 FF1234

funciones TO_CHAR. . Punto decimal en la posición


especificada
999999,99 1234,00

, Coma en la posición especificada 999.999 1.234


SELECT TO_CHAR(salary, MI Signos menos a la derecha 999999MI 1234-
'$99,999') AS (valores negativos)
"Salary" PR Introduce entre paréntesis los 999999PR <1234>
números negativos
EEEE Notación científica (debe tener 99.999EEEE 1,23E+03
Salary cuatro EEEE)

24.000 $ V Multiplica por 10 n veces 9999V99 9999V99


(n = número de 9 después de V)
17.000 $ B Muestra los valores cero como B9999.99 1234,00
espacios en blanco, no como 0

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 20
Presenter
2019-07-06 20:55:18

Conversión de Datos Numéricos


--------------------------------------------
Las respuestas aparecerán en la siguiente
diapositiva.

en Datos de Caracteres
• ¿Puede identificar ELEMENT DESCRIPTION EXAMPLE RESULT

los modelos de 9 Posición numérica (la cantidad


de 9 determina el ancho de
999999 1234

formato utilizados 0
la visualización)
Muestra los ceros iniciales 099999 001234

para generar la $
L
Signo de dólar flotante
Símbolo de divisa local flotante
999999 $
L999999
1234 $
FF1234
siguiente salida? . Punto decimal en la posición
especificada
999999,99 1234,00

– 3000,00 $ , Coma en la posición especificada 999.999 1.234

MI Signos menos a la derecha 999999MI 1234-


– 4.500 (valores negativos)
PR Introduce entre paréntesis los 999999PR <1234>

– 9.000,00 EEEE
números negativos
Notación científica (debe tener 99.999EEEE 1,23E+03

– 0004422
cuatro EEEE)
V Multiplica por 10 n veces 9999V99 9999V99
(n = número de 9 después de V)

B Muestra los valores cero como B9999.99 1234,00


espacios en blanco, no como 0

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 21
Conversión de Datos Numéricos
en Datos de Caracteres
• Respuestas:

SQL: Salida
SELECT TO_CHAR(3000, '$99999.99') 3000,00 $
FROM dual;
SELECT TO_CHAR(4500, '99,999') 4.500
FROM dual;
SELECT TO_CHAR(9000, '99,999.99') 9.000,00
FROM dual;
SELECT TO_CHAR(4422, '0,009,999') 0004422
FROM dual;

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 22
Conversión de Caracteres en
• Por lo general, es aconsejable convertir una cadena
de caracteres en un número. La función necesaria
para realizar esta conversión es:
TO_NUMBER(character string, 'format model')

• El modelo de formato es opcional, pero se debería


incluir si la cadena de caracteres que se va a
convertir contiene cualquier carácter que no sean
números.
• No puede realizar cálculos de forma fiable con datos
de caracteres.
SELECT TO_NUMBER('5,320', '9,999') AS "Number" Número
FROM dual; 5320

DPS5L1
Conversión de Caracteres en
Funciones de Conversión

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 23
Presenter
2019-07-06 20:55:18
--------------------------------------------
Oracle Application Express devolverá un
error de Oracle (Número no válido) si el

Conversión de Caracteres en
modelo de formato no coincide con el
número devuelto por la base de datos.

• La columna bonus incluye los datos que contienen


4 caracteres y el modelo de formato especifica 3
caracteres, por lo que se devuelve un error.

SELECT last_name, TO_NUMBER(bonus,


'999')
SELECT FROM employees
last_name, TO_NUMBER(bonus, LAST_NAME Incentivo
WHERE
'9999') AS "Bonus" = 80;
department_id
Zlotkey 1500
FROM employees
WHERE department_id = 80; Abel 1700
DPS5L1
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 24
Funciones de Conversión Taylor 1250
Conversión de Caracteres en
• Para convertir una cadena de caracteres en un
formato de fecha, utilice:
TO_DATE('character string', 'format model')
• Esta conversión toma una cadena de caracteres que no
sea un valor de fecha como, por ejemplo, "3
noviembre de 2001" y lo convierte en un valor de
fecha.
• El modelo de formato indica al servidor que la
cadena de caracteres "se parece a":
– TO_DATE('November
Devolverá 03-Nov-2001.
3, 2001', 'Month dd, yyyy')

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 25
Conversión de Caracteres en
• Cuando realiza una conversión de caracteres en
fecha, el modificador fx (formato exacto)
especifica la coincidencia exacta entre el
argumento de carácter y el modelo de formato de
fecha.
• En el siguiente ejemplo, tenga en cuenta que en
"May10 " no hay ningún espacio entre "May" y
"10".
• El modelo de formato fx busca la coincidencia con
el argumento de caracteres, ya que tampoco tiene
ningún espacio entre "Mon" y "DD".
SELECT TO_DATE('May10,1989', 'fxMonDD,YYYY') CONVERT
DPS5L1
AS Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 26
"Convert" 10-May-1989
Reglas del Modificador
• Las reglas del modificador fx son:
– La puntuación y el texto entre comillas en el argumento de
caracteres deben coincidir con las partes correspondientes del
modelo de formato exactamente (excepto en lo que respecta
a mayúsculas/minúsculas).
– El argumento de carácter no puede tener espacios
en blanco adicionales.
• Sin fx, Oracle Server ignora los espacios en blanco adicionales.
– Los datos numéricos del argumento de carácter deben tener
el mismo número de dígitos que el elemento correspondiente
en el modelo de formato.
• Sin fx, los números del argumento de carácter no pueden omitir
los ceros iniciales.

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 27
Reglas del Modificador

Examples: Output
SELECT TO_DATE('Sep 07, 1965', 'fxMon dd, YYYY') 07-Sep-1965
AS "Date"
FROM dual;
SELECT TO_DATE('July312004', 'fxMonthDDYYYY') 31-Jul-2004
AS "Date"
FROM DUAL;
SELECT TO_DATE('June 19, 1990','fxMonth dd, 19-Jun-1990
YYYY') AS "Date"
FROM DUAL;

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 28
Formato de Fecha RR y Formato de Fecha
• Todos los datos de fecha ahora se almacenan
utilizando años de cuatro dígitos (YYYY).
• No obstante, algunas bases de datos de legado
pueden seguir utilizando el formato de dos dígitos
(YY).
• No hace tanto tiempo que hemos cambiado de sigo,
de 1900 a 2000.
• Este cambio vino acompañado de una gran confusión
en función de si una fecha escrita como 02-Jan-98 se
interpretaría como 2 de enero de 1998 o 2 de enero
de 2098.
Formato de Fecha RR y Formato de Fecha
DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 29
Formato de Fecha RR y Formato de Fecha
• Si los datos que se van a convertir de datos de
caracteres a datos de fecha solo contienen un año de
dos dígitos, Oracle tiene una forma de interpretar
estas fechas con el siglo correcto.
• Por ejemplo: '27-Oct-95'
Date
• El año de dos dígitos se interpreta
SELECT TO_DATE('27-Oct-95','DD/Mon/YY')
AS como 2095,
27-Oct-2095
que"Date"
puede que no sea lo previsto.
FROM

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 30
Formato de Fecha RR y Formato de Fecha
• Si YY se utiliza en el modelo de formato, se asume
que el año pertenece al siglo actual.
• Si el año de dos dígitos no está en el siglo
actual, utilizamos RR.
SELECT TO_DATE('27-Oct-95','DD-Mon-RR')
Date
• El año de dos dígitos ahora se interpreta
AS "Date" como 1995.
27-Oct-1995
FROM
dual;

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 31
Algunas Sencillas
• Si el formato de fecha se especifica con el formato RR,
el valor de retorno tiene dos posibilidades, en función
del año actual.
• Si el año actual está entre 00-49:
– Fechas a partir de 0- Si el año de dos dígitos
especificado es:
49: la fecha estará en 0-49 50-99
el siglo actual Si dos de 0-49 La fecha de La fecha de
los dígitos devolución devolución
– Fechas a partir de 50- del año está en el está en el
actual son: siglo actual siglo anterior
99: la fecha estará en el al actual
siglo pasado 50-99 La fecha de
devolución
La fecha de
devolución
está en está en el
el siglo siglo actual
posterior
al actual

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 32
Algunas Sencillas
• Si el año actual está entre 50-99:
– Fechas a partir de 0-49: la fecha estará en el siglo siguiente
– Fechas a partir de 50-99: la fecha estará en el siglo actual

Si el año de dos dígitos


especificado es:
0-49 50-99
Si dos de los 0-49 La fecha de La fecha de
dígitos devolución devolución
del año está en el está en el
actual son: siglo actual siglo anterior
al actual
50-99 La fecha de La fecha de
devolución devolución
está en está en el
el siglo siglo actual
posterior al
actual

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 33
Algunas Sencillas
• En la siguiente tabla se proporcionan algunos
ejemplos de cómo se interpretan YY y RR y,
en función del año actual.

Año Actual Fecha Especificada Formato RR Formato YY


1995 27-Oct-95 1995 1995
1995 27-Oct-17 2017 1917
2015 27-Oct-17 2017 2017
2015 27-Oct-95 1995 2095

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 34
Presenter
2019-07-06 20:55:20
--------------------------------------------
Esto se puede solucionar mediante la
sustitución de YY en el modelo de formato

Algunas Sencillas
con RR o mediante años de cuatro
dígitos , con YYYY.

• Cuando consulto mi base de datos de empleados


utilizando la siguiente sentencia, devuelve todas las
filas de la tabla.
• Sé que solo existen unos pocos empleados que
se contrataron antes de 1990.
• ComoYY') el modelo
employeesde formato en la cláusula WHERE
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-
FROM
utiliza
WHEREYY, y el año
hire_date actual es 2015, la consulta
< TO_DATE('01-Jan-90','DD-Mon-YY');

devuelve filas con un valor hire_date inferior a 2090.

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 35
Terminologí
Entre los términos clave utilizados en esta lección se
incluyen:
• CHAR
• DATE
• Formato de fecha DD
• Funciones de conversión
• fm
• NUMBER

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 36
Terminologí
Entre los términos clave utilizados en esta lección se
incluyen:
• Formato de fecha RR
• TO_CHAR
• TO_DATE
• TO_NUMBER
• VARCHAR2
• Modificador fx

DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 37
Resume
En esta lección, debe haber aprendido lo siguiente:
• Proporcionar un ejemplo de conversión de tipo de
dato implícita y explícita y una conversión de tipo de
dato implícita
• Explicar el motivo de la importancia, desde una
perspectiva de negocio, de que un lenguaje
tenga capacidades de conversión de datos
incorporadas
• Crear una consulta SQL que aplique correctamente
las funciones de una sola fila TO_CHAR, TO_NUMBER
y TO_DATE para obtener el resultado deseado
Resume DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 38
Resume
En esta lección, debe haber aprendido lo siguiente:
• Aplicar el modelo de formato de fecha y/o
caracteres adecuado para producir una salida
deseada
• Explicar y aplicar el uso de YY y RR para devolver el
año correcto como se almacenó en la base de datos
Resume
DPS5L1
Funciones de Conversión Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 39
Programación de
Bases de Datos con SQL
5-2
Funciones NULL

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados.
Objetivo
En esta lección se abordan los siguientes objetivos:
• Mostrar y explicar la evaluación de una función anidada
• Enumerar al menos cuatro funciones generales
que funcionan con cualquier tipo de dato y están
relacionadas con el tratamiento de valores nulos
• Explicar el uso de las funciones COALESCE y NVL
• Explicar el uso de funciones generales para tratar
con valores nulos en los datos
• Crear y ejecutar una consulta SQL que aplica
correctamente las funciones NVL NVL2, NULLIF
y COALESCE de una sola fila
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 3
Objetiv
• Además de las funciones que controlan cómo se
formatean los datos o se convierten en otro tipo,
SQL utiliza un juego de funciones generales diseñado
específicamente para tratar valores nulos.
• Puede que se pregunte cómo un valor que no está
disponible, sin asignar, desconocido o no aplicable
pueda merecer tanta atención.
• Lo nulo puede ser "nada", pero puede afectar a la forma
en que las expresiones se evalúan, ¿cómo se calculan
las medias y dónde aparece un valor en una lista
ordenada.
• Esta lección trata sobre el manejo de valores nulos.
Presenter
2019-07-06 20:55:31
--------------------------------------------
Gran parte de la potencia de SQL se
dedica a emular las decisiones que tenemos

Objetiv
que tomar cada día. Necesitamos el
formato de fecha cambiado para cumplir
con el formato de escritura de otro
DPS5L2 país. Es necesario emitir cheques de
Funciones NULL Copyright © 2019, Oracle y/o sus filiales.nóminas
Todos losque
derechos reservados.
incluyan 4
signos de monedas
en lugar de solo números.
Método de Evaluación de las
• Hasta ahora, ha aplicado funciones de una sola fila
en sentencias simples.
• Sin embargo, es posible anidar funciones
a cualquier profundidad.
• Es importante saber cómo se evalúan las
funciones anidadas.
• "Anidación" hace referencia a una cosa que está
incluida en otra cosa (como un huevo dentro de un
nido).
• El siguiente ejemplo muestra una función anidada.
• El proceso de evaluación empieza desde el nivel
más profundo hasta el nivel menos profundo.
Método de Evaluación de las
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 5
Método de Evaluación de las

SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date, 6), 'FRIDAY'), 'fmDay,


Month ddth, YYYY') AS "Next
Evaluation" FROM employees
WHERE employee_id = 100;

• Los resultados son:


– Friday, December 18th, 1987

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 6
Presenter
2019-07-06 20:55:31
--------------------------------------------
Las funciones anidadas se evalúan a partir
de la función más profunda, continuando

Método de Evaluación de las


hacia la menos profunda.

SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date, 6), 'FRIDAY'), 'fmDay,


Month ddth, YYYY') AS "Next
Evaluation" FROM employees
WHERE employee_id = 100;

• Paso 1: A la fecha de contratación se le van a


agregar seis meses.
• Paso 2: Se identificará el primer viernes siguiente al
día devuelto en el paso 1.
• Paso 3: Al formato de fecha por defecto se le aplicará
formato para que muestre la fecha devuelta por el
paso 2 en un formato similar a: Viernes, 18 de
diciembre de 1987, y aparecerá en la salida bajo el
nombre de la columna "Next Evaluation".
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 7
Funciones Relacionadas con los
Valores Nulos
• Al principio del curso, se presentó el término "nulo".
• Nulo es el valor que no está disponible, que está
sin asignar, es desconocido o que no es aplicable.
• Como resultado, no podemos comprobar si es el
mismo que otro valor, porque no sabemos qué valor
tiene.
• No es igual a nada, ni siquiera a cero.
• Pero que no sea realmente nada no significa que no
sea importante.
Funciones Relacionadas con los
Valores Nulos
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 8
Funciones Relacionadas con los
Valores Nulos
• Imagine esta pregunta: ¿Es cierto que X = Y?
• Para responderla tiene que conocer los valores de X e Y.
• Oracle tiene cuatro funciones generales
relacionadas con el uso de valores nulos.
• Las cuatro funciones son:
– NVL
– NVL2
– NULLIF
– COALESCE

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 9
Función
• La función NVL convierte un valor nulo en un
valor conocido de un tipo de dato fijo, ya sea de
fecha, carácter o numérico.
• Los tipos de dato de la columna de valor nulo y el
nuevo valor deben ser los mismos.
• La función NVL es:
• NVL
NVL (valor o columna
(expression que may
1 value that pueden contener
contain a null, un
expression 2 value to substitute for null)
valor nulo, el valor para sustituir un valor nulo)

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 10
Función
• En la siguiente consulta se utiliza la función NVL
con tipos de dato de carácter:

SELECT country_name, NVL(internet_extension,


'None') AS "Internet extn"
FROM wf_countries
WHERE location = 'Southern Africa'
ORDER BY internet_extension DESC;
COUNTRY_NAME Internet n
ext

• Los valores nulos se Juan de Nova Island None


sustituyen por el texto 'None'. Europa Island None
Republic of Zimbabwe .zw
Republic of Zambia .zm
Republic of South Africa .za

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 11
Presenter
2019-07-06 20:55:32
--------------------------------------------
Los valores NULL de las tablas se han
sustituido mediante la función NVL

Función
(resaltada en rojo).

• Los tipos de dato de la columna de valor nulo y el


nuevo valor deben ser el mismo que se muestra
en los ejemplos siguientes:
Ejemplos: Salida
SELECT last_name, NVL(commission_pct, 0) Zlotkey
FROM employees Abel
WHERE department_id IN(80,90);
Taylor
King
SELECT NVL(date_of_independence, 'No date') 1-Jul-1867
FROM wf_countries; 15-Sep-1821
5-Jul-1975
*Tipo de datos de date_of_independence es Varchar2.
No date

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 12
Función
• Puede utilizar la función NVL para convertir los valores
de columna que contengan valores nulos en un
número antes de realizar los cálculos.
• Cuando se realiza un cálculo aritmético con un
valor nulo, el resultado es nulo.
• La función NVL puede convertir el valor null en
un número antes de que se realicen los cálculos
aritméticos para evitar un resultado nulo.

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 13
Función
• En el ejemplo, la columna commission_pct de la
tabla employees contiene valores nulos.
• La función NVL se utiliza para cambiar el valor nulo
a cero antes de los cálculos aritméticos.
SELECT last_name, NVL(commission_pct, 0)*250
AS "Commission"
FROM employees LAST_NAME Commission
WHERE department_id IN(80,90); Zlotkey 50
Abel 75
Taylor 50
King 0
Kochhar 0
De Haan 0

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 14
Presenter
2019-07-06 20:55:32
--------------------------------------------
LONG es un tipo de dato de caracteres de
longitud variable de hasta 2 GB de

Función
tamaño. Los tipos de dato se tratan más
detalladamente más adelante en el curso.

• La función NVL2 evalúa una expresión con tres valores.


• Si el primer valor no es nulo, la función NVL2 devuelve
la segunda expresión.
• Si el primer valor es nulo, se devolverá la tercera expresión.
• Los valores de la expresión 1 pueden tener cualquier tipo
de dato.
• La expresión 2 y la expresión 3 pueden tener cualquier
tipo de dato, excepto LONG.
• El tipo de dato del valor devuelto siempre es el mismo que
el tipo de dato de la expresión 2, a menos que la expresión
2 sean datos de caracteres, en cuyo caso, el tipo devuelto es
VARCHAR2.
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 15
Función
• La función NVL2 es:
• Una manera fácil de recordar NVL2 es pensar: "si la
NVL2 (expression 1 value that may contain a null,
expression 2 value to return if expression 1 is not null,
expresión
expression 1
3 tiene unreplace
value to valor, if
sustituir expresión
expression 2; si
1 is null)
la expresión 1 es nula, sustituir expresión 3".

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 16
Presenter
2019-07-06 20:55:33
--------------------------------------------
NVL2 comprueba si la expresión 1
(commission_pct) tiene un valor. Si tiene un

Función
valor, se
devuelve la expresión 2 (salary + (salary
* commission_pct). Si la expresión 1 es
NULL, se devuelve la expresión
3 (salary).

• La función NVL2 mostrada utiliza tipos de


dato numéricos para las expresiones 1, 2 y 3.

SELECT last_name, salary,


NVL2(commission_pct, salary + (salary * commission_pct),
salary) AS income
FROM employees
WHERE department_id IN(80,90); LAST_NAME SALARY INCOME
Zlotkey 10500 12600
Abel 11000 14300
Taylor 8600 10320
King 24000 24000
Kochhar 17000 17000
De Haan 17000 17000

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 17
Función
• La función NULLIF compara dos expresiones.
• Si son iguales, la función devuelve un valor nulo.
• Si no son iguales, la función devuelve la
primera expresión.
• La función NULLIF es:
NULLIF(expression 1, expression 2)

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 18
Presenter
2019-07-06 20:55:33
--------------------------------------------
A menudo se utilizan funciones
NULLIF después de realizar proyectos de

Función
migración de datos para probar si los
datos del sistema de destino son los
mismos que en los sistemas de origen
iniciales. Por lo tanto, se
utiliza NULLIF para buscar

• En este ejemplo, NULLIF compara la longitud de excepciones, no coincidencias,


normalmente valores nulos como

los nombres y apellidos de los empleados.


• Si la longitud de ambos elementos es la misma, NULLIF
devuelve NULL (como en la fila 2 Curtis Davies); de lo
contrario, se devuelve el valor LENGTH de la expresión
1 de first_name.
SELECT first_name, LENGTH(first_name) AS "Length FN",
last_name, LENGTH(last_name) AS "Length LN",
NULLIF(LENGTH(first_name), LENGTH(last_name)) AS "Compare
Them"

FIRST_NAME Length FN LAST_NAME Length LN Compare Them


Ellen 5 Abel 4 5
Curtis 6 Davies 6 -
Lex 3 De Haan 7 3

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 19
Función
• La función COALESCE es una extensión de la función
NVL, excepto en que COALESCE puede tener varios
valores.
• La palabra "coalesce" significa literalmente "unir" y eso
es lo que ocurre.
• Si la primera expresión es nula, la función continúa
bajando por la línea hasta que se encuentra una expresión
no nula.
• Por supuesto, si la primera expresión tiene un valor,
la función devuelve la primera expresión y la función
se detiene.
• La función COALESCE es:
COALESCE (expression 1, expression 2, ...expression n)
Función DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 20
Función
• Examine la sentencia SELECT de la tabla
employees mostrada
a la derecha.
• Si un empleado tiene un valor (no NULL) para
commission_pct, este se devuelve; de lo contrario, si
el salario tiene un valor, se devuelve el salario.
• Si los valores commission_pct y salary de los empleados
son NULL, devuelve el número 10. LAST_NAME Comm
SELECT last_name, Grant 15
COALESCE(commission_pct, salary, Zlotkey 2
10) AS "Comm" DPS5L2
Taylor 2 los derechos reservados. 21
FROM employees Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos

ORDER BY commission_pct; Abel 3


Higgins 12000
Gietz 8300
Terminologí
Entre los términos clave utilizados en esta lección se
incluyen:
• NVL
• NVL2
• NULLIF
• COALESCE

DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 22
Resume
En esta lección, debe haber aprendido lo siguiente:
• Mostrar y explicar la evaluación de una función anidada
• Enumerar al menos cuatro funciones generales
que funcionan con cualquier tipo de dato y están
relacionadas con el tratamiento de valores nulos
• Explicar el uso de las funciones COALESCE y NVL
• Explicar el uso de funciones generales para tratar
con valores nulos en los datos
• Crear y ejecutar una consulta SQL que aplica
correctamente las funciones NVL NVL2, NULLIF
y COALESCE de una sola fila
DPS5L2
Funciones NULL Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 23
Programación de
Bases de Datos con SQL
5-3
Expresiones Condicionales

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados.
Objetivo
En esta lección se abordan los siguientes objetivos:
• Comparar y contrastar las funciones DECODE y CASE
• Crear y ejecutar una consulta SQL que
utiliza correctamente las funciones DECODE
y CASE
• Crear y ejecutar dos métodos para implantar la
lógica condicional IF-THEN-ELSE
Objetivo DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 3
Objetiv
• Poder tomar decisiones es esencial en el modelado
de datos.
• Los modeladores tienen que decidir qué funciones
de negocio se deben modelar y cuáles no.
• En el proceso de modelado de datos es necesario que los
diseñadores analicen la información para identificar las
entidades, resolver las relaciones y seleccionar los
atributos.
• Una decisión típica podría ser:
– (IF) Si una empresa necesita realizar un seguimiento de los
datos a lo largo del tiempo, (THEN) En ese caso, el tiempo
puede que necesite ser una entidad o (ELSE) En caso contrario,
el tiempo debería ser un atributo.
Objetiv DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 4
Método de Evaluación de las
• Este proceso de toma de decisiones en programación no
es muy diferente del proceso que se utiliza en la vida
diaria.
• Piense en la última vez que tuvo que tomar una
decisión del tipo if-then-else.
• Si (IF) termino mis deberes antes de las 9:00 p.m.,
puedo ver la televisión; en caso contrario (ELSE), no
puedo ver la televisión.
• En SQL, estos tipos de elecciones implican métodos
de procesamiento condicionales.
• Saber cómo utilizar el procesamiento condicional facilita
la toma de decisiones para obtener los datos que desee.
DPS5L3
Método de Evaluación de las
Expresiones Condicionales

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 5
Expresiones
• Las dos expresiones condicionales son CASE y DECODE.
• Ya ha estudiado NULLIF, que es el equivalente lógico a
la expresión CASE, ya que CASE compara dos
expresiones.
• NULIF compara dos expresiones y, si las dos
expresiones son iguales, devuelve null; si no son
iguales, devuelve la primera expresión.
Expresiones DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 6
Presenter
2019-07-06 20:55:44
--------------------------------------------
Es importante que los alumnos también
aprendan sintaxis propiedad de Oracle, ya

Expresiones
que es posible que se encuentren con esta
sintaxis en bases de datos anteriores.

• Hay dos juegos de comandos o sintaxis que se


pueden utilizar para escribir sentencias SQL:
– Sentencias estándar compatibles con ANSI/ISO SQL 99
– Sentencias propiedad de Oracle
• Los dos juegos de sintaxis son muy similares, pero
hay unas cuantas diferencias.
• En este curso, aprenderá a utilizar ambos juegos de
sentencias SQL, pero se recomienda utilizar la
sintaxis ANSI/ISO SQL 99.

DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 7
Expresiones
• CASE y DECODE son ejemplos de una de
estas diferencias.
• CASE es una sentencia compatible con ANSI/ISO 99
SQL 99.
• DECODE es una sentencia propiedad de Oracle.
• Ambas sentencias devuelven la misma
información utilizando sintaxis diferente.

DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 8
Expresión
• La expresión CASE básicamente realiza la función de
una sentencia IF-THEN-ELSE.
• Los tipos de dato de las expresiones CASE, WHEN y
ELSE deben ser iguales.
• La sintaxis de una expresión CASE es:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 9
Presenter
2019-07-06 20:55:45
--------------------------------------------

Sintaxis de
• La consulta comprueba el LAST_NAME Department
valor department_id. King
Kochhar
Management
Management
De Haan Management
– Si (IF) es 90, (then) Whalen Other dept.
devuelve 'Management' Higgins
Gietz
Other dept.
Other dept.
– Si (IF) es 80, (then) devuelve 'Sales' Zlotkey
Abel
Sales
Sales
– Si (IF) es 60, (then) devuelve 'It' Taylor
Grant
Sales
Other dept.
Mourgos Other dept.
– En caso contrario (ELSE), Rajs Other dept.
devuelve 'Other dept.' Davies
Matos
Other dept.
Other dept.
SELECT last_name, Vargas Other dept.
CASE department_idDPS5L3 Hunold It
WHEN 90 THEN Expresiones Condicionales Copyright © 2019, Ernst
Oracle y/o sus filiales. Todos losIt
derechos reservados. 10
'Management' WHEN 80
THEN 'Sales' WHEN 60 Lorentz It
THEN 'It' Hartstein Other dept.
ELSE 'Other Fay Otro depart.
dept.' END AS
Expresión
• La función DECODE evalúa una expresión de una
forma similar a la lógica IF-THEN-ELSE.
• DECODE compara una expresión con cada uno de
los valores de búsqueda.
• La sintaxis de DECODE es:

• Si se omite el valor por defecto,


DECODE(columnl|expression, search1, se
[, search2, result2,...,]
devuelve un
result1

valor[,nulo donde un valor de búsqueda no coincida


default])
con ninguno de los valores.
DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 11
Expresión
• Examine el ejemplo: LAST_NAME Department
King Aplicaciones de
Kochhar Aplicaciones de
De Haan Aplicaciones de
• Esta
SELECTconsulta devuelve
last_name, Whalen Other dept.
exactamente los mismos resultados
DECODE(department_id
, 90, 'Management',
Higgins
Gietz
Other dept.
Other dept.
que
80,el'Sales',
ejemplo CASE anterior, pero Zlotkey Sales
Abel Sales
utilizando
60, 'It',
'Other
sintaxis diferente. Taylor Sales
dept.') AS Grant Other dept.
"Department" Mourgos Other dept.
FROM employees; Rajs Other dept.
Davies Other dept.
DPS5L3 Matos Other dept. 12
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados.
Vargas Other dept.
Hunold It
Ernst It
Lorentz It
Hartstein Other dept.
Fay Other dept.
Terminologí
Entre los términos clave utilizados en esta lección se
incluyen:
• CASE
• Expresión condicional
• DECODE

DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 13
Resume
En esta lección, debe haber aprendido lo siguiente:
• Comparar y contrastar las funciones DECODE y CASE
• Crear y ejecutar una consulta SQL que
utiliza correctamente las funciones DECODE
y CASE
• Crear y ejecutar dos métodos para implantar la
lógica condicional IF-THEN-ELSE
Resume DPS5L3
Expresiones Condicionales Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. 14

También podría gustarte