buscador

Visita

viernes, 6 de enero de 2023

SQL Capitulo 4 : Uso de Funciones de Conversi贸n y Expresiones Condicionales en SQL

Sean bienvenidos a esta secci贸n donde se revisa el uso de conversiones y expresiones condicionales, recuerden estas sentencias estan siendo ejecutadas en SQL developer administrador de la Base de datos Oracle.

Objetivos de la publicaci贸n:
Al finalizar esta lecci贸n, deber铆a estar capacitado para lo siguiente:
  • Describir varios tipos de funciones de conversi贸n que est谩n disponibles en SQL
  • Utilizar las funciones de conversi贸n TO_CHAR, TO_NUMBER y TO_DATE
  • Aplicar expresiones condicionales en una sentencia SELECT
Esta lecci贸n se centra en funciones que convierten los datos de un tipo en otro (por ejemplo, conversi贸n de datos de caracteres en datos num茅ricos) y describe las expresiones condicionales en sentencias SQL SELECT.


Conversi贸n de tipo de dato impl铆cito y expl铆cito
Funciones de Conversi贸n

Adem谩s de los tipos de dato de Oracle, las columnas de las tablas de una Oracle Database se pueden definir utilizando los tipos de dato American National Standards Institute (ANSI), DB2 y SQL/DS. Sin embargo, el servidor de Oracle convierte internamente esos tipos de dato a tipos de dato de Oracle.

En algunos casos, el servidor de Oracle recibe datos de un tipo de dato cuando espera datos de un tipo de dato diferente. Cuando esto ocurre, el servidor de Oracle puede convertir autom谩ticamente los datos al tipo de dato esperado. Esta conversi贸n de tipo de dato puede realizarla el servidor de Oracle impl铆citamente o el usuario expl铆citamente.

Las conversiones de tipo de dato funcionan seg煤n las reglas explicadas.

Las conversiones de tipo de dato expl铆citas se realizan utilizando las funciones de conversi贸n. Las funciones de conversi贸n sirven para convertir los valores de un tipo de dato a otro. Generalmente, el formato de los nombres de funciones sigue la convenci贸n data type TO data type. El primer tipo de dato es el tipo de dato de entrada; el segundo tipo de dato es la salida.

Nota: aunque la conversi贸n de tipo de dato impl铆cita est谩 disponible, se recomienda que realice una conversi贸n de tipo de dato expl铆cita para asegurar la fiabilidad de las sentencias SQL.

Conversi贸n Impl铆cita del Tipo de Dato
En expresiones, el servidor de Oracle puede convertir autom谩ticamente:
El servidor de Oracle puede realizar autom谩ticamente una conversi贸n de tipo de dato en una expresi贸n. Por ejemplo, la expresi贸n hire_date > '01-JAN-90' tiene como resultado la conversi贸n impl铆cita de la cadena '01-JAN-90' a una fecha. Por lo tanto, un valor VARCHAR2 o CHAR se puede convertir de forma impl铆cita a un tipo de dato de fecha o n煤mero en una expresi贸n.

Para la evaluaci贸n de expresiones, el servidor de Oracle puede convertir autom谩ticamente:


En general, el servidor de Oracle utiliza la regla de expresiones cuando se necesita una conversi贸n de tipo de dato. Por ejemplo, la expresi贸n grade = 2 tiene como resultado la conversi贸n impl铆cita del n煤mero 2 a la cadena “2” porque el grado es una columna CHAR(2).

Nota: las conversiones de CHAR a NUMBER se realizan correctamente s贸lo si la cadena de caracteres representa un n煤mero v谩lido.

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

Nota: la lista de funciones mencionadas en esta lecci贸n incluye s贸lo algunas de las funciones de conversi贸n disponibles.
Para obtener m谩s informaci贸n, consulte la secci贸n sobre funciones de conversi贸n en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database).

Funciones TO_CHAR, TO_DATE, TO_NUMBER
Uso de la Funci贸n TO_CHAR con Fechas
El modelo de formato:
  • Debe estar entre comillas simples.
  • Es sensible a may煤sculas/min煤sculas.
  • Puede incluir cualquier elemento de formato de fecha v谩lido.
  • Tiene un elemento fm para eliminar los espacios en blanco o suprimir ceros iniciales.
  • Est谩 separado del valor de fecha por una coma.
TO_CHAR convierte un tipo de dato de fecha y hora a un valor de tipo de dato VARCHAR2 con el formato especificado porformat_model. Un modelo de formato es un car谩cter literal que describe el formato de fecha y hora almacenado en una cadena de caracteres. Por ejemplo, el modelo de formato de fecha y hora '11-Nov-1999' es 'DD-Mon-YYYY'. Puede utilizar la funci贸n TO_CHAR para convertir una fecha de su formato por defecto a uno que especifique.

Instrucciones
El modelo de formato debe estar entre comillas simples y es sensible a may煤sculas/min煤sculas.
El modelo de formato puede incluir cualquier elemento de formato de fecha v谩lido. Aseg煤rese de separar el valor de fecha del modelo de formato con una coma.
Los nombres de los d铆as y meses en la salida se rellenan autom谩ticamente con espacios en blanco.
Para eliminar los espacios en blanco o suprimir los ceros iniciales, utilice el elemento fm de modo de relleno.
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired
FROM   hr.employees
WHERE  last_name = 'Higgins';

Resultado:

Elementos del Modelo de Formato de Fecha



Los elementos de tiempo formatean la parte de la hora de la fecha:
Agregan cadenas de caracteres entre comillas dobles:
El n煤mero se agrega como sufijo de los n煤meros en letra:

Utilice los formatos de las siguientes tablas para mostrar la informaci贸n de tiempo, los literales y para cambiar los numerales a n煤meros en letra.

Uso de la Funci贸n TO_CHAR con Fechas

La sentencia SQL muestra los apellidos y fechas de contrataci贸n de todos los empleados. La fecha de contrataci贸n aparece como 17 de junio de 1987.
Ejemplo:
Modifique el ejemplo para mostrar las fechas en un formato que aparezca como “Diecisiete de junio de 1987 12:00:00 AM.”

SELECT last_name, TO_CHAR(hire_date, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
FROM    hr.employees;

Uso de la Funci贸n TO_CHAR con N煤meros

脡stos son algunos de los elementos de formato que puede utilizar con la funci贸n TO_CHAR para mostrar un valor de n煤mero como un car谩cter:

Al trabajar con valores de n煤mero como cadenas de caracteres, debe convertir dichos n煤meros al tipo de dato de car谩cter utilizando la funci贸n TO_CHAR que traduce un valor del tipo de dato NUMBER a un tipo de dato VARCHAR2. Esta t茅cnica es muy 煤til con la concatenaci贸n.


El servidor de Oracle muestra una cadena de signos de n煤mero (#) en lugar de un n煤mero completo cuyos d铆gitos exceden el n煤mero de d铆gitos proporcionado en el modelo de formato.
El servidor de Oracle redondea el valor decimal almacenado al n煤mero de decimales proporcionado en el modelo de formato.

Uso de Funciones TO_NUMBER y TO_DATE
Convertir una cadena de caracteres a un formato de n煤mero que utiliza la funci贸n TO_NUMBER:
Convertir una cadena de caracteres a un formato de fecha que utiliza la funci贸n TO_DATE:
Estas funciones tienen un modificador fx. Este modificador especifica la coincidencia exacta para el argumento de car谩cter y el modelo de formato de fecha de una funci贸n TO_DATE.

Puede que desee convertir una cadena de caracteres a un n煤mero o a una fecha. Para realizar esta tarea, utilice las funcione TO_NUMBER o TO_DATE. El modelo de formato que seleccione est谩 basado en los elementos de formato demostrados anteriormente.
El modificador fx especifica la coincidencia exacta para el argumento de car谩cter y el modelo de formato de fecha de una funci贸n TO_DATE:
La puntuaci贸n y el texto entre comillas del argumento de car谩cter debe coincidir exactamente (excepto en las may煤sculas/min煤sculas) con las partes correspondientes  del modelo de formato. 
El argumento de car谩cter no puede tener espacios en blanco adicionales. Sin fx, el servidor de Oracle 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.



Muestre el nombre y fecha de contrataci贸n de todos los empleados que empezaron a trabajar el 24 de mayo de 1999. En el siguiente ejemplo, hay dos espacios despu茅s del mes May y antes del n煤mero 24. Ya que se utiliza fx, se necesita una coincidencia exacta y los espacios despu茅s de la palabra May no se reconocer谩n:
SELECT last_name, hire_date
FROM   hr.employees
WHERE  hire_date = TO_DATE('May  24, 1999', 'fxMonth DD, YYYY');

Uso de las Funciones TO_CHAR y TO_DATE con el Formato de Fecha RR
Para buscar los empleados contratados antes de 1990, utilice el formato de fecha RR, que produce los mismos resultados si se ejecutara el comando en 1999 o en la actualidad:

Para buscar los empleados contratados antes de 1990, se puede utilizar el formato RR. Debido a que el a帽o actual es mayor que 1999, el formato RR interpreta la parte del a帽o  de la fecha de 1950 a 1999.
Por otro lado, en el siguiente comando no se selecciona ninguna fila porque el formato YY interpreta la parte del a帽o de la fecha en el siglo actual (2090).

Funciones de anidaci贸n
Las funciones de una sola fila se pueden anidar en cualquier nivel.
Las funciones anidadas se eval煤an desde el nivel m谩s profundo hasta el nivel menos profundo.
Las funciones de una sola fila se pueden anidar en cualquier profundidad. Las funciones anidadas se eval煤an desde el nivel m谩s profundo hasta el nivel menos profundo. Los siguientes ejemplos muestran la flexibilidad de estas funciones.

Funciones de Anidaci贸n: Ejemplo 1

El ejemplo muestra los apellidos de los empleados en el departamento 60. La evaluaci贸n de la sentencia SQL implica tres pasos:
1. La funci贸n interna recupera los primeros ocho caracteres del apellido.
Result1 = SUBSTR (LAST_NAME, 1, 8)
2. La funci贸n externa concatena el resultado con _US.
Result2 = CONCAT(Result1, '_US')
3. La funci贸n m谩s externa convierte los resultados a may煤sculas.
La expresi贸n completa se convierte en la cabecera de columna porque no se ha proporcionado ning煤n alias de columna.



Funciones de Anidaci贸n: Ejemplo 2
El ejemplo muestra los salarios de los empleados dividido entre 7 y redondeado a dos decimales. El resultado se formatea para mostrar el salario con notaci贸n en dan茅s. Es decir, la coma se utilizar como decimal y el punto para los miles.
En primer lugar, la funci贸n interna ROUND se ejecuta para redondear el valor del salario dividido entre 7 a dos decimales. La funci贸n TO_CHAR se utiliza entonces para aplicar formato al resultado de la funci贸n ROUND.

Nota: los elementos D y G especificados en el par谩metro de funci贸n TO_CHAR son elementos de formato de n煤mero. D devuelve un car谩cter decimal en la posici贸n especificada. G se utiliza como un separador de grupo.

Funciones generales
Las siguientes funciones funcionan con cualquier tipo de dato y pertenecen al uso de valores nulos:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

Estas funciones funcionan con cualquier tipo de dato y pertenecen al uso de valores nulos en la lista de expresiones.

Nota: para obtener m谩s informaci贸n sobre los cientos de funciones disponibles, consulte la secci贸n sobre funciones en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database).

Funci贸n NVL
Convierte un valor nulo a un valor real:
  • Los tipos de dato que se pueden utilizar son fecha, car谩cter y n煤mero.
  • Los tipos de dato deben coincidir con:

NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')

Para convertir un valor nulo a un valor real, utilice la funci贸n NVL. 
Sintaxis
NVL (expr1, expr2)
En la sintaxis:
expr1 es el valor de origen o expresi贸n que puede contener un valor nulo
expr2 es el valor de destino para convertir el valor nulo
Puede utilizar la funci贸n NVL para convertir cualquier tipo de dato, pero el valor de retorno siempre es el mismo que el tipo de dato de expr1.



Uso de la Funci贸n NVL

Para calcular la compensaci贸n anual de los empleados, necesita multiplicar el salario mensual por 12 y, a continuaci贸n, agregue el porcentaje de comisi贸n al resultado:
SELECT last_name,  salary, commission_pct,
(salary*12) + (salary*12*commission_pct) AN_SAL
FROM   hr.employees;

Uso de la Funci贸n NVL2
La funci贸n NVL2 examina la primera expresi贸n. Si la primera expresi贸n no es nula, la funci贸n NVL2 devuelve la segunda expresi贸n. Si la primera expresi贸n es nula, se devolver谩 la tercera expresi贸n. 
Sintaxis
NVL2(expr1, expr2, expr3)
En la sintaxis:
expr1 es el valor de origen o expresi贸n que puede contener un valor nulo
expr2 es el valor que se devuelve si expr1 no es nulo
expr3 es el valor que se devuelve si expr1 es nulo

En el ejemplo se examina la columna COMMISSION_PCT. Si se detecta un valor, se devolver谩 el valor literal de texto de SAL+COMM. Si la columna COMMISSION_PCT contiene un valor nulo, se devolver谩 el valor literal de texto SAL.

Nota: el argumento expr1 puede tener cualquier tipo de dato. Los argumentos expr2 y expr3 pueden tener cualquier tipo de dato excepto LONG. 


Uso de la Funci贸n NULLIF

La funci贸n NULLIF compara dos expresiones.
Sintaxis
NULLIF (expr1, expr2)
En la sintaxis:
NULLIF compara expr1 y expr2. Si son iguales, la funci贸n devuelve un valor nulo. Si no, la funci贸n devuelve expr1. Sin embargo, no puede especificar el literal NULL para expr1.
En el ejemplo, la longitud del nombre en la tabla EMPLOYEES se compara con la longitud del apellido en la tabla EMPLOYEES. Cuando las longitudes de ambos son iguales, se mostrar谩 un valor nulo. Cuando las longitudes no son iguales, se mostrar谩 la longitud del nombre.

Nota: la funci贸n NULLIF es el equivalente l贸gico de la siguiente expresi贸n CASE. La expresi贸n CASE:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Uso de la Funci贸n COALESCE
La ventaja de la funci贸n COALESCE con respecto a la funci贸n NVL es que la funci贸n COALESCE puede obtener m煤ltiples valores alternativos.
Si la primera expresi贸n no es nula, la funci贸n COALESCE devuelve esa expresi贸n; de lo contrario, aplica la funci贸n COALESCE de las expresiones restantes.

La funci贸n COALESCE devuelve la  primera expresi贸n no nula de la lista.
Sintaxis
COALESCE (expr1, expr2, ... exprn)
En la sintaxis:
expr1 devuelve esta expresi贸n si no es nula
expr2 devuelve esta expresi贸n si la primera expresi贸n es nula y 茅sta no es nula
exprn devuelve esta expresi贸n si las expresiones anteriores son nulas
Tenga en cuenta que todas las expresiones deben ser del mismo tipo de dato.

Uso de la Funci贸n COALESCE


En el ejemplo se muestra el valor manager_id si 茅ste no es nulo. Si el valor manager_id es nulo, se mostrar谩 commission_pct. Si los valores manager_id y commission_pct son nulos, se muestra “No commission and no manager”. Tenga en cuenta que la funci贸n TO_CHAR se aplica de modo que todas las expresiones sean del mismo tipo de dato.

Ejemplo:
Para los empleados que no perciben ninguna comisi贸n, la organizaci贸n desea proporcionar un aumento de salario de 2.000 d贸lares y para los empleados que perciben comisi贸n, la consulta debe calcular el nuevo salario que es igual al salario existente sumado a la comisi贸n.

SELECT last_name,  salary, commission_pct,
 COALESCE((salary+(commission_pct*salary)), salary+2000, salary) "New Salary"
FROM   hr.employees;

Nota: examine la salida. Para los empleados que no perciben ninguna comisi贸n, la columna de nuevo salario muestra el salario aumentado en 2.000 d贸lares y para los empleados que perciben comisi贸n, la columna de nuevo salario muestra la comisi贸n calculada sumada al salario.

Expresiones condicionales
Proporcionar el uso de la l贸gica IF-THEN-ELSE en una sentencia SQL
Utilizar dos m茅todos:
  • Expresi贸n CASE
  • Funci贸n DECODE
Los dos m茅todos que se utilizan para implantar el procesamiento condicional (l贸gica IF-THEN-ELSE) en la sentencia SQL son la expresi贸n CASE y la funci贸n DECODE.

Nota: la expresi贸n CASE cumple con SQL ANSI. La funci贸n DECODE es espec铆fica de la sintaxis de Oracle.

Expresi贸n CASE
Facilita las consultas condicionales realizando el trabajo de una  sentencia IF-THEN-ELSE:
Las expresiones CASE permiten utilizar la l贸gica IF-THEN-ELSE en las sentencias SQL sin tener que llamar a los procedimientos.
En una expresi贸n CASE simple, el servidor de Oracle busca el primer par WHEN ... THEN para el que expr es igual a comparison_expr y devuelve return_expr. Si ninguno de los pares WHEN ... THEN cumple con esta condici贸n y existe una cl谩usula ELSE, el servidor de Oracle devuelve else_expr. De lo contrario, el servidor de Oracle devuelve un valor nulo. No puede especificar el valor literal NULL para todas las expresiones return_expr y else_expr. 
Las expresiones expr y comparison_expr deben ser del mismo tipo de dato, que puede ser CHAR, VARCHAR2, NCHAR o NVARCHAR2. Todos los valores de retorno (return_expr) deben ser del mismo tipo de dato.

Uso de la Expresi贸n CASE
Facilita las consultas condicionales realizando el trabajo de una  sentencia IF-THEN-ELSE:
En la sentencia SQL, se descodifica el valor de JOB_ID. Si JOB_ID es IT_PROG, el aumento de salario es del 10%; si JOB_ID es ST_CLERK, el aumento de salario es del 15%; si JOB_ID es SA_REP, el aumento del salario es del 20%. Para el resto de otros roles de cargo, no hay ning煤n aumento de salario.
La misma sentencia se puede escribir con la funci贸n DECODE.
El siguiente c贸digo es un ejemplo de la expresi贸n buscada CASE. En una expresi贸n CASE buscada, la b煤squeda se realiza de izquierda a derecha hasta que se encuentra una coincidencia de la condici贸n mostrada y, a continuaci贸n, se devuelve la expresi贸n de retorno. Si no se encuentra ninguna condici贸n verdadera y existe una cl谩usula ELSE, se devuelve la expresi贸n de retorno en la cl谩usula ELSE; de lo contrario, 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;

Funci贸n DECODE
Facilita las consultas condicionales realizando el trabajo de una expresi贸n CASE o una sentencia IF-THEN-ELSE:

La funci贸n DECODE decodifica una expresi贸n de una forma similar a la l贸gica IF-THEN-ELSE que se utiliza en varios idiomas. La funci贸n DECODE descodifica expression despu茅s de compararla con cada valor search. Si la expresi贸n es la misma que search, se devuelve result.
Si se omite el valor por defecto, se devuelve un valor nulo donde un valor de b煤squeda no coincida con ninguno de los valores de resultado.

Uso de la Funci贸n DECODE

En la sentencia SQL de la diapositiva, se prueba el valor de JOB_ID. Si JOB_ID es IT_PROG, el aumento de salario es del 10%; si JOB_ID es ST_CLERK, el aumento de salario es del 15%; si JOB_ID es SA_REP, el aumento del salario es del 20%. Para el resto de otros roles de cargo, no hay ning煤n aumento de salario.
La misma sentencia se puede expresar en pseudoc贸digo como una sentencia 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

Mostrar el impuesto aplicable para cada empleado del departamento 80:

Esta diapositiva muestra otro ejemplo que utiliza la funci贸n DECODE. En este ejemplo, puede determinar los impuestos para cada empleado del departamento 80 seg煤n su salario mensual. Los impuestos son los siguientes: 

Rango de Salario Mensual Impuesto
$0,00–1.999,99             00%
$2.000,00–3.999,99     09%
$4.000,00–5.999,99     20%
$6.000,00–7.999,99     30%
$8.000,00–9.999,99     40%
$10.000,00–11.999,99             42%
$12.200,00–13.999,99             44%
14.000,00 o superior             45%

Resumen
En esta lecci贸n, debe haber aprendido lo siguiente:
  • Modificar formatos de fecha para su visualizaci贸n utilizando funciones
  • Convertir tipos de dato de columna utilizando funciones
  • Utilizar funciones NVL
  • Utilizar la l贸gica IF-THEN-ELSE y otra expresi贸n condicional en una sentencia SELECT


Recuerde lo siguiente:
Las funciones de conversi贸n pueden convertir valores num茅ricos, de fecha y de car谩cter: Funciones TO_CHAR, TO_DATE, TO_NUMBER
Existen varias funciones que pertenecen a valores nulos, incluyendo NVL, NVL2, NULLIF y COALESCE.
La l贸gica IF-THEN-ELSE se puede aplicar en una sentencia SQL utilizando la expresi贸n CASE o la funci贸n DECODE.

No hay comentarios.:

Publicar un comentario

Raul Tamani A. ©. Im谩genes del tema de fpm. Con tecnolog铆a de Blogger.

Adblock Detectado

Apoya este sitio desactivando el Adblock para seguir navegando. ¡Gracias!

¡Ya Desactive el Adblock!