Вы находитесь на странице: 1из 29

PRACTICA 05

USO DE LAS FUNCIONES DE CONVERSIN Y


DE LAS EXPRESIONES CONDICIONALES

OBJETIVOS

Al finalizar esta leccin, usted debera ser capaz de hacer lo siguiente:

FIS
Describir los distintos tipos de funciones de conversin que estn disponibles en SQL Server.
Utilice las funciones de conversin TO_CHAR, TO_NUMBER, y TO_DATE.
Aplicar las expresiones condicionales en una sentencia SELECT.

Esta leccin se centra en las funciones que convierten los datos de un tipo a otro (por ejemplo, la
conversin de datos de carcter a los datos numricos) y se discuten las expresiones
condicionales en las instrucciones SQL SELECT.

LECCIN DEL ORDEN DEL DA

Conversin de tipo de datos implcita y explcita


Funciones TO_CHAR, TO_DATE, TO_NUMBER
Las funciones de anidamiento
Funciones Generales:
NVL
NVL2
NULLIF
COALESCE
Las expresiones condicionales:
CASE
Decode

FUNCIONES DE CONVERSIN

Conversion de Tipo
de Datos

Conversion Implicita Conversion Explicita


de Tipo de Datos de Tipo de Datos

Adems de los tipos de datos Oracle, las columnas de las tablas de una base de datos de
Oracle se puede definir mediante el uso de la American National Standards Institute
(ANSI), DB2 y SQL / DS tipos de datos. Sin embargo, el servidor de Oracle convierte
internamente estos tipos de datos de tipos de datos Oracle.

En algunos casos, el servidor de Oracle recibe datos de un tipo de datos donde se espera
que los datos de un tipo de datos diferente. Cuando esto sucede, el servidor de Oracle
puede convertir automticamente los datos al tipo de datos esperado. Esta conversin de
tipo de datos puede hacerse implcitamente por el servidor de Oracle o explcitamente por
el usuario.

Las conversiones de tipos de datos implcitos funcionan de acuerdo a las normas


expuestas en las siguientes diapositivas. Explcitas las conversiones de tipos de datos se
realizan mediante el uso de las funciones de conversin. Las funciones de Conversin
convierten el valor de un tipo de datos a otro. Generalmente, la forma de los nombres de
las funciones sigue el tipo de convencin de los datos al tipo de datos. El primer tipo de

FIS
datos es el tipo de entrada de datos y el segundo tipo de datos es la salida.

Nota: Aunque la conversin implcita de tipos de datos estn disponibles, se recomienda


que lo haga la conversin de datos de tipo explcita para asegurar la fiabilidad de las
sentencias SQL

CONVERSIN DE TIPOS DE DATOS IMPLCITA

En las expresiones, el servidor de Oracle puede convertir automticamente lo siguiente:

Desde A
VARCHAR2 o CHAR NMERO
VARCHAR2 o CHAR FECHA (DATE

Servidor de Oracle puede realizar automticamente la conversin de tipo de datos en una


expresin. Por ejemplo, la expresin de Hire_date > '01-JAN-90 resulta en la conversin
implcita de la cadena '01-JAN-90 'a una fecha. Por lo tanto, un valor VARCHAR2 o CHAR
se puede convertir implcitamente en un nmero o tipo de datos de fecha en una
expresin.

Para la evaluacin de la expresin, el servidor de Oracle puede convertir


automticamente lo siguiente:

Desde A
NMERO VARCHAR2 o CHAR
FECHA (DATE) VARCHAR2 o CHAR

En general, el servidor de Oracle utiliza la regla de expresiones cuando una conversin de


tipo de datos que se necesita. Por ejemplo, el grado de expresin = 2 da como resultado
la conversin implcita del nmero 2 de la cadena "2" porque el grado es un char (2) de la
columna.

Nota: CHAR para conversiones de nmeros slo tendr xito si la cadena de caracteres
representa un nmero vlido.

CONVERSIN DE TIPOS DE DATOS EXPLCITA


TO_NUMBER TO_DATE

NUMERO CARACTER DATE

FIS
TO_CHAR TO_CHAR

SQL Server proporciona tres funciones para convertir un valor de un tipo de datos a otro:

Funcin Propsito
TO_CHAR (nmero | fecha, [ fmt ], Convierte un nmero o valor de fecha en una
[nlsparams]) cadena de caracteres VARCHAR2 con el modelo
de formato fmt
Nmero de la conversin: El parmetro
nlsparams especifica los siguientes caracteres,
que son devueltos por los elementos de formato
de nmeros:
- Carcter decimal
- Grupo de separacin
- Smbolo de la moneda local
- Smbolo de moneda internacional

Si nlsparams o cualquier otro parmetro se omite,


esta funcin utiliza los valores de los parmetros
por defecto para la sesin.
TO_CHAR (nmero | fecha, [ fmt ], El parmetro nlsparams especifica el lenguaje en
nlsparams]) el que se devuelve el mes y el da, los nombres y
abreviaturas. Si se omite este parmetro, esta
funcin utiliza los lenguajes de la fecha por
defecto para la sesin.
TO_NUMBER (char, [ fmt ], Convierte una cadena de caracteres que contiene
nlsparams]) dgitos a un nmero en el formato especificado
por el modelo de formato fmt opcional.
El parmetro nlsparams tiene el mismo propsito
en esta funcin como en la funcin TO_CHAR
para conversin de nmero.
TO_DATE (char, [ fmt ], Convierte una cadena de caracteres que
[nlsparams]) representa una fecha a un valor de fecha de
acuerdo con fmt que se especifica. Si fmt es
omitido, el formato es DD-MON-YY.
El parmetro nlsparams tiene el mismo propsito
en esta funcin como en la funcin TO_CHAR
para conversin de fechas.

Nota: La lista de funciones que se mencionan en esta leccin incluye slo algunas de las
funciones de conversin disponibles.

Para obtener ms informacin, consulte la seccin "Funciones de conversin" en Oracle


Database 11g Referencia del lenguaje SQL, Release 1 (11.1).

FIS
USO DE LA FUNCIN TO_CHAR CON FECHAS

TO_CHAR(date, 'format_model')

El modelo de formato:

Debe estar encerrado entre comillas simples


Est entre maysculas y minsculas
Puede incluir cualquier elemento de formato de fecha vlida
Tiene un elemento para eliminar los espacios en blanco FM acolchados o suprimir
ceros a la izquierda
Se ha separado del valor de la fecha por una coma

TO_CHAR convierte un tipo de datos de fecha y hora a un valor de tipo de datos


VARCHAR2 en el formato especificado por el format_model. Un modelo de formato es un
literal de caracteres que describe el formato de fecha y hora almacenadas en una cadena
de caracteres. Por ejemplo, el modelo de formato de fecha y hora para la cadena '11-Nov-
1999 es DD-MES-AAAA. Puede utilizar la funcin TO_CHAR para convertir una fecha a
partir de su formato por defecto a la que usted especifique.

Directrices

El modelo de formato debe estar encerrado entre comillas simples y distingue entre
maysculas y minsculas.
El modelo de formato puede incluir cualquier elemento de formato de fecha vlido.
Pero asegrese de separar el valor de la fecha de la modelo de formato con una
coma.
Los nombres de los das y meses en la salida son automticamente rellena con
espacios en blanco.
Para eliminar los espacios en blanco con relleno o suprimir ceros a la izquierda, utilice
el modo de relleno elemento de FM.

SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired


FROM employees
WHERE last_name = 'Higgins';
FIS
ELEMENTOS DEL MODELO DE FORMATO DE FECHA

Elemento Result
YYYY Ao completo en cifras
YEAR Ao enunciado (en Ingls)
MM Valor de dos dgitos para el mes
MONTH Nombre completo del mes del mes
MON Abreviatura de tres letras del mes
DY Abreviatura de tres letras del da de la semana
DAY Nombre del da completo del da de la semana
DD Da numrico del mes

Elementos de la muestra del formato de formato de fecha vlido

Elemento Descripcin
SCC o CC Siglo; Prefijo de Servidor con fecha A.C.
Aos en fechas Ao, Prefijo de Servidor con fecha B.C.
YYYY o SYYYY
YYY o YY o Y ltimos tres, dos, o un dgito del ao
Y, YYY Ao con una coma en esta posicin
IYYY, IYY, IY, I Cuatro, tres, dos o un digito del ao basada en el estndar ISO
SYEAR o AO Ao enunciado; Prefijo de Servidor con fecha A.C.
AC o DC Indica aos A.C. o D.C.
A.C. o D.C. Indica periodos A.C. o D.C.
Q Trimestre del ao
MM Mes: Valor de dos dgitos
MONTH Nombre del mes rellenado con espacios en blanco para una
longitud de nueve caracteres
MON Nombre del mes, abreviatura de tres letras
RM Nmero romano del Mes
WW o W Semana del ao o del mes
DDD o DD o D Da del ao, mes o semana
DAY Nombre del da rellenado con espacios en blanco para una
longitud de nueve caracteres
DY Nombre del da, abreviatura de tres letras
J Da Juliano, el nmero de das desde el 31 de diciembre de
4713 A.C.
IW Semanas en el ao a partir de la norma ISO (de 1 a 53)

ELEMENTOS DEL MODELO DE FORMATO DE FECHA

Los elementos de tiempo formato a la parte de tiempo a la fecha:

FIS
HH24: MI: SS AM PM 15:45:32

Aadir las cadenas de caracteres, inclyalos entre comillas dobles:


DD "de" MONTH 12 de octubre

Nmero de sufijos Escriba los nmeros:


ddspth decimocuarto

Utilice los formatos que se muestran en las tablas siguientes para mostrar la informacin
del tiempo y literales, y para cambiar los nmeros a los nmeros escritas.

Elemento Descripcin
AM o PM Indicador Meridiano
A.M. o P.M. Indicador Meridiano con perodos
HH o HH12 o HH24 Hora del da, o la hora (1-12), o la hora (0-23)
MI Minutos (0-59)
SS Segundos (0-59)
SSSSS Segundos pasada la medianoche (0-86399)

Otros Formatos
Elemento Descripcin
/., Puntuacin se reproduce en el resultado
"De la" Cadena entrecomillada se reproduce en el resultado.

Especificacin de sufijos para influir en Visualizacin de nmeros


Elemento Descripcin
TH simo nmero ordinal (por ejemplo, DDTH para el 4TH)
SP Numero deletreado (por ejemplo, DDSP de CUATRO)
SPTH o THSP Nmeros ordinales (por ejemplo, DDSPTH de Cuarto)

USO DE LA FUNCIN TO_CHAR CON FECHAS

SELECT last_name,
TO_CHAR (hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM employees;
FIS
La sentencia SQL de la diapositiva muestra los apellidos y las fechas de contratacin para
todos los empleados. La fecha de contratacin aparece como el 17 junio de 2003.

Ejemplo:

Modificar el ejemplo de la diapositiva para mostrar las fechas en un formato que aparece
como "Decimosptima de junio de 2003 12:00:00 AM".

SELECT last_name,
TO_CHAR(hire_date,
'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
FROM employees;
FIS
Tenga en cuenta que el mes sigue el modelo de formato que se especifica, en otras
palabras, la primera letra se escribe con mayscula y el resto en minsculas.

USO DE LA FUNCIN TO_CHAR CON NMEROS

TO_CHAR(number, 'format_model')

Estos son algunos de los elementos de formato que se pueden utilizar con la funcin
TO_CHAR para mostrar un valor numrico como un caracter:

Elemento Resultado
9 Representa un nmero
0 Fuerzas un cero que se mostrar
$ Coloca un signo de dlar flotante
L Utiliza el smbolo flotante de la moneda local
. Imprime un punto decimal
, Imprime una coma como un indicador de miles

Cuando se trabaja con valores numricos, tales como cadenas de caracteres, es


necesario convertir esos nmeros para el tipo de carcter de datos mediante la funcin
TO_CHAR, que se traduce en un valor de tipo de datos NUMBER a VARCHAR2 tipo de
datos. Esta tcnica es especialmente til con la concatenacin.

Formato de Elementos de Nmero

Si est convirtiendo un nmero para el tipo de datos de carcter, puede utilizar los
elementos de formato:

Elemento Descripcin Ejemplo Resultado


9 Posicin Numrica (nmero de 9s determinado 999999 1234
por el ancho de la pantalla)
0 Mostrar ceros a la izquierda 099999 001234
$ Signo de Dlar flotante $999999 $1234
L Smbolo flotante de moneda local L999999 FF1234
D Devuelve el carcter decimal en la posicin 99D99 99.99
especificada. El valor predeterminado es un
punto (.)
. Punto decimal en la posicin especificada 999.999,99 1.234,00
G Devuelve el separador de grupo en la posicin 9,999 9G999

FIS
especificada. Puede especificar los separadores
de varios grupos en un modelo de formato de
nmero.
, Coma en la posicin especificada 999,999 1,234
MI Signos menos a la derecha (valores negativos) 999999MI 1234 -
PR Parntesis a los nmeros negativos 999999PR <1234>
EEEE Notacin cientfica (formato debe especificar los 99.999EEEE 1.234E+03
cuatro elementos)
U Regresa en la posicin especificada de los U9999 1234
"Euro" (u otra) en moneda de doble
V Multiplicar por 10 V n veces (n = nmero de 9s 9999V99 123400
despus de V)
S Devuelve el valor negativo o positivo S9999 -1234 o
1234
B Mostrar valores cero como en blanco, no es 0 B9999.99 1234,00

USO DE LA FUNCIN TO_CHAR CON NMEROS

SELECT TO_CHAR(salary, '$99,999.00') SALARY


FROM employees
WHERE last_name = 'Ernst';

El servidor de Oracle muestra una cadena de signos de nmero (#) en lugar de un


nmero entero cuyos dgitos mayor que el nmero de dgitos previstos en el modelo
de formato.
Las rondas de servidor de Oracle almacena el valor decimal en el nmero de
decimales que figuran en el modelo de formato.
USO DE LA FUNCION TO_NUMBER Y TO_DATE

Conversin de una cadena de caracteres a un formato de nmero utilizando la funcin


de TO_NUMBER:

TO_NUMBER (char [, 'format_model'])

Convertir una cadena de caracteres a un formato de fecha con la funcin TO_DATE:

FIS
TO_DATE (char [, 'format_model'])

Estas funciones tienen un modificador de fx. Este modificador especifica la


coincidencia exacta para el argumento del carcter y el modelo de formato de fecha
de una funcin TO_DATE.

Es posible que desee convertir una cadena de caracteres a un nmero o una fecha. Para
realizar esta tarea, utilice funciones TO_NUMBER o TO_DATE. El modelo de formato que
elija se basa en los elementos de formato demostrado previamente.

El modificador fx especifica la coincidencia exacta para el argumento del carcter y el


modelo de formato de fecha de una funcin TO_DATE:

Puntuacion y texto de cita en el argumento de carcter debe coincidir exactamente


con (excepto para el caso) las partes correspondientes del modelo de formato.
El argumento de carcter no puede tener espacios en blanco adicionales. Sin fx, el
servidor de Oracle ignora los espacios en blanco extra.
Los datos numricos en el argumento de personaje debe tener el mismo nmero de
dgitos que el elemento correspondiente en el modelo de formato. Sin fx, los nmeros
en el argumento de carcter se pueden omitir los ceros iniciales.

Ejemplo:

Mostrar el nombre y la fecha de contratacin para todos los empleados que comenzaron
el 21 de mayo de 2007. Hay dos espacios despus del mes de mayo y antes de que el
nmero 21 en el siguiente ejemplo. Debido a que el modificador de FX se utiliza, una
coincidencia exacta que se requiere y los espacios despus de la palabra que no se
reconocen:

SELECT last_name, hire_date


FROM employees
WHERE hire_date = TO_DATE('Mayo 21, 2007', 'fxMonth DD, YYYY');

La salida de error resultante es el siguiente:


FIS
Para ver la salida, corregir la consulta mediante la eliminacin del espacio adicional entre
'mayo' y '21 '.

SELECT last_name, hire_date


FROM employees
WHERE hire_date = TO_DATE('Mayo 21, 2007', 'fxMonth DD, YYYY');

USO DE LA FUNCIN TO_CHAR TO_DATE Y CON EL FORMATO DE FECHA RR

Para encontrar a los empleados contratados antes de 2006, utilice el formato de fecha
RR, que produce los mismos resultados que si el comando se ejecuta en 1999 o ahora:

SELECT last_name, TO_CHAR (hire_date, 'DD-Mon-YYYY')


FROM employees
WHERE hire_date < TO_DATE ('01-Jan-06','DD-Mon-RR');
FIS
Para encontrar a los empleados que fueron contratados antes de 2006, el formato RR
puede ser utilizado. Debido a que el ao en curso es mayor que 1999, el formato RR
interpreta la parte de ao de la fecha de 1950 a 1999.

Por otra parte, el siguiente comando, se traduce en ningn registro es seleccionado


porque el formato YY interpreta la parte de ao de la fecha en el presente siglo (2090).

SELECT last_name, TO_CHAR (hire_date, 'DD-Mon-yyyy')


FROM employees
WHERE TO_DATE (TO_CHAR (hire_date, 'DD-Mon-yy') ) < '01-Jan-1990';

FUNCIONES DE ANIDACIN

Las funciones de una hilera se pueden anidar en cualquier nivel.


Las funciones anidadas son evaluadas desde el nivel ms profundo que el nivel
menos profundo.
F3( F2( F1(col,arg1), arg2), arg3)

Paso 1 = Resultado 1

Paso 2 = Resultado 2

FIS
Paso 3 = Resultado 3

Una hilera de funciones se pueden anidar a cualquier profundidad. Las funciones


anidadas son evaluadas desde el nivel ms profundo que el nivel ms externo. He aqu
algunos ejemplos para mostrar la flexibilidad de estas funciones.

FUNCIONES DE ANIDACIN: EJEMPLO 1

SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM employees
WHERE department_id = 60;

El ejemplo de la diapositiva muestra los apellidos de los empleados del departamento 60.
La evaluacin de la instruccin SQL consta de tres pasos:

1. La funcin interna recupera los primeros ocho caracteres del apellido.


Result1 = SUBSTR (LAST_NAME, 1, 8)

2. Los exteriores de la funcin concatena el resultado con _nosotros.


Result2 = CONCAT (Result1, '_US')

3. La funcin ms externa convierte los resultados a maysculas.


La expresin completa se convierte en el encabezado de la columna debido a que no se
le dio el alias de columna.

Ejemplo:

Muestra la fecha del prximo viernes que es de seis meses a partir de la fecha de
contratacin. La fecha resultante debe aparecer como Viernes, 13 de Julio 2001. Ordenar
los resultados por fecha de contratacin.

FIS
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS (hire_date, 6), 'VIERNES'),
'fmDay, Month ddth, YYYY')
"Next 6 Month Review"
FROM employees
ORDER BY hire_date;

FUNCIONES DE ANIDACIN: EJEMPLO 2

SELECT TO_CHAR (ROUND((salary/7), 2),'99G999D99',


'NLS_NUMERIC_CHARACTERS = '',.'' ')
"Formatted Salary"
FROM employees;
FIS
El ejemplo de la diapositiva muestra los salarios de los empleados dividido entre 7 y
redondeado a dos decimales. El resultado se formatea para mostrar el sueldo en la
notacin dans. Es decir, coma se utiliza para el punto decimal y un perodo de miles de
personas.

En primer lugar, la funcin ROUND interna se ejecuta para redondear el valor del salario
dividido por 7 a dos decimales. La funcin TO_CHAR se utiliza para dar formato al
resultado de la funcin ROUND.

Nota: D y G que se especifica en el parmetro de la funcin TO_CHAR son elementos de


formato de nmero. D devuelve un carcter decimal en la posicin especificada. T se
utiliza como un separador de grupo.

FUNCIONES GENERALES

Las siguientes funciones trabajan con cualquier tipo de datos, que pertenecen a valores
nulos:

NVL (expr1, expr2)


NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., Exprn)

Estas funciones trabajan con cualquier tipo de datos y se relacionan con el uso de valores
nulos en la lista de expresiones.

Funcion
NVL
Descripcin
Convierte un valor nulo a un valor real
NVL2 Si expr1 no es nulo, NVL2 devuelve expr2. Si expr1 es nulo, NVL2
devuelve expr3. El argumento expr1 puede tener cualquier tipo de datos.
NULLIF Compara dos expresiones y devuelve null si son iguales, devuelve la
primera expresin si no son iguales
COALESCE Devuelve el primer no-nula expresin en la lista de expresiones

Nota: Para obtener ms informacin acerca de los cientos de funciones disponibles,


consulte la seccin "Funciones" en Oracle Database 11g SQL Referencia del lenguaje,

FIS
Release 1 (11.1).

FUNCIN NVL

Convierte un valor nulo a un valor real:

Los tipos de datos que se pueden utilizar son la fecha, el carcter, y el nmero.
Los tipos de datos deben coincidir:
- NVL (COMMISSION_PCT, 0)
- NVL (hire_date, '01-ENE-06 ')
- NVL (job_id: "No trabajo todava")

Para convertir un valor nulo a un valor real, utilizar la funcin NVL.

Sintaxis
NVL (expr1, expr2)

En la siguiente sintaxis:

expr1 es el valor de origen o una expresin que puede contener un valor nulo
expr2 es el valor objetivo para la conversin de la hiptesis nula

Usted puede utilizar la funcin NVL para convertir cualquier tipo de datos, pero el valor
devuelto siempre es el mismo que el tipo de datos de expr1.

Conversiones NVL para distintos tipos de datos

Tipo de Datos Ejemplo de Conversion


NUMBER NVL(number_column,9)
DATE NVL(date_column, '01-ENE-06')
CHAR o VARCHAR2 NVL(character_column, 'Unavailable')

USO DE LA FUNCIN NVL

SELECT last_name, salary, NVL (commission_pct, 0),


(salary*12) + (salary*12*NVL (commission_pct, 0) ) AN_SAL
FROM employees;
FIS
Para el clculo de la compensacin anual de todos los empleados, es necesario
multiplicar el sueldo mensual por 12 y luego agregar el porcentaje de comisin en el
resultado:

SELECT last_name, salary, commission_pct,


(salary*12) + (salary*12*commission_pct) AN_SAL
FROM employees;

Tenga en cuenta que la compensacin anual se calcula slo para aquellos empleados
que ganan una comisin.
Si algn valor de la columna en una expresin es nulo, el resultado es nulo. Para calcular
los valores de todos los empleados, debe convertir el valor nulo a un nmero antes de
aplicar el operador aritmtico. En el ejemplo de la diapositiva, la funcin NVL se utiliza
para convertir los valores nulos a cero

USO DE LA FUNCIN NVL2

SELECT last_name, salary, commission_pct,

FIS
NVL2 (commission_pct,
'SAL+COMM', 'SAL') income
FROM employees WHERE department_id IN (50, 80);

La funcin de NVL2 examina la primera expresin. Si la primera expresin no es nulo, la


funcin NVL2 devuelve la segunda expresin. Si la primera expresin es nula, la tercera
expresin se devuelve.

Sintaxis

NVL2 (expr1, expr2, expr3)

En la siguiente sintaxis:

expr1 es el valor de origen o una expresin que puede contener un valor nulo
expr2 es el valor que se devuelve si expr1 no es NULL
expr3 es el valor que se devuelve si expr1 es nulo

En el ejemplo mostrado en la diapositiva, la columna COMMISSION_PCT se examina. Si


se detecta un valor, el valor del texto literal de la SAL + COMM se devuelve. Si la columna
COMMISSION_PCT contiene un valor nulo, el valor del texto literal de la SAL se
devuelve.
Nota: El argumento expr1 puede tener cualquier tipo de datos. Los argumentos expr2 y
expr3 pueden tener cualquier tipo de datos, excepto LONG.

UTILIZACIN DE LA FUNCIN NULLIF

SELECT first_name, LENGTH (first_name) "expr1",


last_name, LENGTH (last_name) "expr2",
NULLIF (LENGTH (first_name), LENGTH (last_name)) result

FIS
FROM employees;

La funcin NULLIF compara dos expresiones.

Sintaxis

NULLIF (expr1, expr2)

En la siguiente sintaxis:

NULLIF compara expr1 y expr2. Si son iguales, la funcin devuelve un valor nulo. Si
no es as, la funcin devuelve expr1. Sin embargo, no se puede especificar el literal
NULL para expr1.

En el ejemplo mostrado en la diapositiva, la longitud del nombre primero en la tabla


EMPLOYEES se compara con la longitud del ltimo nombre de la tabla EMPLOYEES.
Cuando las longitudes de los nombres son iguales, un valor nulo se muestra. Cuando las
longitudes de los nombres no son iguales, la longitud del nombre primero se muestra.
Nota: La funcin NULLIF es lgicamente equivalente a la expresin siguiente caso. La
expresin CASE se discute en una pgina posterior:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

USO DE LA FUNCIN COALESCE

La ventaja de la funcin COALESCE sobre la funcin NVL es que la funcin

FIS
COALESCE puede tomar varios valores alternativos.
Si la primera expresin no es nulo, el COALESCE devuelve la funcin que la de
expresin, de lo contrario, hace un COALESCE de las expresiones restantes.

La funcin COALESCE devuelve el primer no-nula expresin en la lista.

Sintaxis

COALESCE (expr1, expr2, ... Exprn)

En la siguiente sintaxis:

expr1 regresa esta expresin si no es nulo


expr2 regresa esta expresin si la primera expresin es nula y esta expresin no es
nulo
Exprn devuelve esta expresin si las expresiones anteriores son nulos

Ntese que todas las expresiones deben ser del mismo tipo de datos.

SELECT last_name, employee_id,


COALESCE(TO_CHAR(commission_pct),TO_CHAR(manager_id),
'No commission and no manager')
FROM employees;
En el ejemplo mostrado en la diapositiva, si el valor MANAGER_ID no es nulo, que se
muestra. Si el valor MANAGER_ID es nulo, el COMMISSION_PCT se muestra. Si los
valores MANAGER_ID y COMMISSION_PCT son nulos ", sin comisiones y sin gerente"
en la pantalla. Ntese que la funcin TO_CHAR se aplica de manera que todas las
expresiones son del mismo tipo de datos.

Ejemplo:

FIS
Para los empleados que no reciben ningn tipo de comisin, su organizacin quiere dar
un aumento salarial de $ 2.000 y para los empleados que reciben comisin, la consulta
debe calcular el nuevo salario que es igual al salario existente agrega a la cantidad de la
comisin.

SELECT last_name, salary, commission_pct,


COALESCE((salary+(commission_pct*salary)), salary+2000, salary) "New
Salary"
FROM employees;

Nota: Examine el resultado. Para los empleados que no reciben ningn tipo de comisin,
la columna Salario Nueva muestra el salario se incrementa en $ 2.000 y para los
empleados que reciben comisin, la columna Salario Nueva muestra el importe de la
comisin calculada aadido al salario.

EXPRESIONES CONDICIONALES

Proporcionar el uso de la lgica IF-THEN-ELSE dentro de una sentencia SQL.


Utilice dos mtodos:
- Expresin CASE
- Funcin DECODE

Los dos mtodos que se utilizan para implementar el procesamiento condicional (IF-
THEN-ELSE lgica) en una sentencia SQL son la expresin CASE y la funcin DECODE.

Nota: La expresin CASE cumple con la norma ANSI SQL. La funcin DECODE es
especfico a la sintaxis de Oracle.

EXPRESIN CASE

FIS
Facilita las consultas condicionales de hacer el trabajo de una instruccin IF-THEN-ELSE:

CASE expr WHEN comparison_expr1 THEN return_expr1


[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END

Expresiones CASE permiten utilizar la lgica IF-THEN-ELSE en sentencias SQL sin tener
que invocar los procedimientos.

En una expresin CASE simple, el servidor de Oracle busca el primer par WHEN... THEN
para que expr es igual a comparison_expr y devuelva return_expr. Si ninguno de los pares
WHEN... THEN cumplen con esta condicin, y si existe una clusula ELSE, el servidor
Oracle devuelve else_expr. De lo contrario, el servidor de Oracle devuelve un valor nulo.
No se puede especificar el literal NULL para todos los return_exprs y la else_expr.

Las expresiones expr y comparison_expr deben ser del mismo tipo de datos, que puede
ser CHAR, VARCHAR2, NCHAR o NVARCHAR2. Todos los valores de retorno
(return_expr) deben ser del mismo tipo de datos.

UTILIZANDO LA EXPRESIN CASE

Facilita las consultas condicionales de hacer el trabajo de una instruccin IF-THEN-ELSE:

SELECT last_name, job_id, salary,


CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED_SALARY"
FROM employees;
FIS
En la instruccin SQL en la diapositiva, el valor de JOB_ID se decodifica. Si se JOB_ID
IT_PROG, el incremento salarial es del 10%, si es JOB_ID ST_CLERK, el incremento
salarial es del 15%, si es JOB_ID SA_REP, el incremento salarial es del 20%. Para todos
los otros roles de trabajo, no hay un aumento de sueldo.

La misma afirmacin puede ser escrito con la funcin DECODE.

El siguiente cdigo es un ejemplo de la expresin CASE de bsqueda. En una expresin


CASE de bsqueda, la bsqueda se produce de izquierda a derecha hasta que una
ocurrencia de la condicin de la lista se encuentra, a continuacin, devuelve la expresin
de retorno. Si no hay ninguna afeccin que se encuentra para ser verdad, y si existe una
clusula ELSE, la expresin de retorno en la clusula ELSE se devuelve, de lo contrario,
uno se devuelve NULL.

SELECT last_name,salary,
(CASE WHEN salary<5000 THEN 'Low'
WHEN salary<10000 THEN 'Medium'
WHEN salary<20000 THEN 'Good'
ELSE 'Excellent'
END) qualified_salary
FROM employees;
FIS
FUNCIN DECODE

Facilita las consultas condicionales de hacer el trabajo de una expresin CASE o una
instruccin IF-THEN-ELSE:

DECODE(col|expression, search1, result1


[, search2, result2,...,]
[, default])

La funcin DECODE descifra una expresin de una manera similar a la lgica IF-THEN-
ELSE que se utiliza en varios idiomas. La expresin de la funcin DECODE descifra
despus de comparar a cada valor de bsqueda. Si la expresin es la misma que la
bsqueda, se devuelve como resultado.

Si el valor predeterminado se omite, un valor nulo se devuelve en un valor de bsqueda


no coincide con ninguno de los valores del resultado.

USO DE LA FUNCIN DECODE

SELECT last_name, job_id, salary,


DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary, salary)
REVISED_SALARY
FROM employees;
FIS
En la instruccin SQL en la diapositiva, el valor de JOB_ID se prueba. Si se JOB_ID
IT_PROG, el incremento salarial es del 10%, si es JOB_ID ST_CLERK, el incremento
salarial es del 15%, si es JOB_ID SA_REP, el incremento salarial es del 20%. Para todos
los otros roles de trabajo, no hay un aumento de sueldo.

La misma afirmacin puede ser expresado en pseudocdigo como una instruccin IF-
THEN-ELSE:

IF job_id = 'IT_PROG' THEN salary = salary*1.10


IF job_id = 'ST_CLERK' THEN salary = salary*1.15
IF job_id = 'SA_REP' THEN salary = salary*1.20
ELSE salary = salary

Muestra el tipo impositivo aplicable a cada empleado en el departamento 80:

SELECT last_name, salary,


DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,

FROM employees
0.45) TAX_RATE

WHERE department_id = 80;


FIS
Esta diapositiva muestra otro ejemplo con la funcin DECODE. En este ejemplo, se
determina la tasa de impuestos para cada empleado en el departamento 80 en funcin del
sueldo mensual. Los tipos impositivos son los siguientes:

Rango de Salario Mensual


$ 0.00-1,999.99
$ 2,000.00-3,999.99
$ 4,000.00-5,999.99
$ 6,000.00-7,999.99
$ 8,000.00-9,999.99
$ 10,000.00-11,999.99
$ 12,200.00-13,999.99
$ 14,000.00 o mayor

EXAMEN
Tasa de Impuesto
00%
09%
20%
30%
40%
42%
44%
45%

La funcin de TO_NUMBER convierte ya sea cadenas de caracteres o valores de fecha a


un nmero en el formato especificado por el modelo de formato opcional.

1. Verdadero
2. Falso

Respuesta: 2
RESUMEN

En esta leccin, usted debe haber aprendido a:


Modificar los formatos de fecha para su visualizacin con funciones
Convertir tipos de datos utilizando las funciones de columna.
Uso de las funciones NVL
Uso de IF-THEN-ELSE y otras expresiones condicionales en una sentencia SELECT

FIS
Recuerde lo siguiente:
Funciones de conversin puede convertir el carcter, la fecha, y los valores
numricos: TO_CHAR, TO_DATE, TO_NUMBER
Hay varias funciones que pertenecen a los nulos, incluyendo NVL, NVL2, NULLIF y
COALESCE.
La lgica IF-THEN-ELSE se puede aplicar dentro de una instruccin SQL mediante la
expresin CASE o la funcin DECODE.

PRCTICA 4: INTRODUCCIN

Esta prctica cubre los siguientes temas:


Creacin de consultas que utilizan TO_CHAR, TO_DATE y otras funciones DATE
Creacin de consultas que utilizan expresiones condicionales como DECODE y CASE

Esta prctica proporciona una variedad de ejercicios con funciones TO_CHAR y


TO_DATE y expresiones condicionales como DECODE y CASE. Recordemos que para
las funciones anidadas, los resultados se evaluaron a partir de la funcin ms interna a la
funcin ms externa.

PRCTICA 4

1. Crear un informe que produce lo siguiente para cada empleado:


<employee last_name> gana <salary> gana mensualmente, pero quiere al menos
<3 veces salary.>. Etiquetar los sueldos de ensueo de las columnas.

2. Mostrar el apellido de cada empleado (last_name), la fecha de contratacinv


(hire_date) y la fecha de revisin salarial, que es el primer lunes despus de seis
meses de servicio. Etiquetar el EXAMEN de la columna. Dar formato a las fechas
que aparezcan en el formato similar al "lunes, el treinta y uno de julio de 2000.

FIS

3. Mostrar el apellido (last_name), fecha de contratacin (hire_date), y el da de la


semana en que el empleado comenz. Etiquetar la columna DAY. Ordenar los
resultados por el da de la semana, empezando por el lunes.

4. Crear una consulta que muestra los apellidos (last_name) de los empleados y las
cantidades ltimos de comisin (commission amount). Si un empleado no gana
comisin, mostrar "No Comisin." Etiqueta la columna COMM.


FIS
Si tiene tiempo, siga los siguientes ejercicios:

5. Uso de la funcin DECODE, escriba una consulta que muestra el grado de todos
los empleados basndose en el valor de la JOB_ID columna, utilizando los
siguientes datos:

Trabajo Grado
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Ninguna de las anteriores 0

6. Vuelva a escribir la declaracin en el ejercicio anterior, utilizando la sintaxis de


CASE.

Вам также может понравиться