Está en la página 1de 22

Traducido del inglés al español - www.onlinedoctranslator.

com

Oracle para principiantes Página : 1


Capítulo 7

FUNCIONES DE CADENA,
CONVERSIÓN Y VARIAS

Funciones de cadena

Funciones de conversión

Funciones misceláneas

En el último capítulo hemos visto cómo usar funciones aritméticas y de fecha. En este capítulo veamos
cómo usar cadenas, conversión y funciones misceláneas.

Funciones de cadena
Las funciones de cadena son funciones que manipulan un conjunto de caracteres. Un conjunto de caracteres es
una cadena. Por ejemplo, el nombre de la empresa, la dirección de una persona, todos estos son ejemplos de una
cadena. Los tipos de datos CHAR y VARCHAR contienen cadenas. Veamos primero cómo concatenar cadenas en
Oracle.

Concatenar cadenas
Se pueden concatenar dos cadenas (agregar una tras otra) para formar un operador de cadena usando el
concatenación de cadena única, que es || (dos símbolos de tubería).

El siguiente ejemplo concatena el nombre de la facultad con la calificación. También colocamos dos espacios
entre estos dos valores para proporcionar el espacio requerido.

seleccionar nombre || '' || cualificado de la facultad

NOMBRE || '' || CUAL


--------------------------------------------------
George Koch MS Ciencias de la Computación
Dan Appleman CS y graduado de EE
Herbert Schildt Maestría en Ciencias de la Computación

David Hunter MS Electrónica


Stephen Walther Doctor. en Filosofía
Kevin Loney MS Electrónica
Jamie Jaworski Licenciados en Electricidad
Jason Couchman OCP DBA

srikanthtechnologies.com
Oracle para principiantes Página : 2

La Tabla 1 muestra la lista de funciones de cadena. Estas funciones generalmente toman una cadena como
parámetro y también devuelven una cadena como valor de retorno.

Función Descripción
LONGITUD (cadena) Devuelve el número de caracteres de la cadena.
INFERIOR (cuerda) Devuelve la cadena después de convertir la cadena a
minúsculas.
SUPERIOR (cadena) Devuelve la cadena después de convertir la cadena a
mayúsculas.
INITCAP (cadena) Convierte el primer carácter de cada palabra
a mayúsculas y el resto a minúsculas.
LPAD (cadena, longitud [, cadena de relleno]) Hace que la cadena tenga la longitud dada rellenando
la cadena de la izquierda con espacio o con fillstring.

RPAD (cadena, longitud [, cadena de relleno]) Igual que LPAD pero pads a la derecha. Elimina todos los caracteres
LTRIM (cadena [, juego de caracteres]) que quedan a la izquierda de la cadena hasta el primer carácter que
no está en el juego de caracteres. si no se proporciona el juego de
caracteres, el valor predeterminado es en blanco. Igual que LTRIM,
RTRIM (cadena [, juego de pero recortado a la derecha. Recorta el espacio en ambos lados.
caracteres]) TRIM (cadena)
SUBSTR (cadena, pos, longitud) Extrae el número de caracteres de longitud de la
posición pos en la cadena. Si no se da la longitud, se
extrae todo de pos.
INSTR (s1, s2 [, pos [, ocurrencia]]) Encuentra la posición inicial de s2 en s1. Si no se da la
ocurrencia, entonces encuentra la primera
ocurrencia. La búsqueda comienza en pos, si se da,
de lo contrario, en el primer carácter de s1.
ASCII (cadena) Devuelve el código ASCII del primer carácter de la
cadena dada
CHR (número) Devuelve un carácter ASCII para el código ASCII
dado.
TRANSLATE (cadena, desde, hasta) Reemplaza los caracteres de con a en cadena.
REPLACE (cadena, fuente, reemplazar) Reemplaza la fuente en la cadena con reemplazar.
Tabla 1: Funciones de cadena.

Conversión de caso
Las funciones INFERIOR y SUPERIOR son sencillas. Y juegan un papel muy importante en la comparación de cuerdas. Como la
comparación de cadenas distingue entre mayúsculas y minúsculas, LOWER o UPPER se pueden utilizar para convertir cadenas a
mayúsculas y minúsculas antes de compararlas.

La siguiente consulta intenta recuperar detalles de cursos relacionados con la programación.

srikanthtechnologies.com
Oracle para principiantes Página : 3

seleccione el nombre, la duración de los cursos


donde el nombre es como '% programación%'

NOMBRE DURACIÓN
------------------------------------
Programación en C 20

La consulta anterior recupera solo uno dos, mientras que hay dos filas que contienen la palabra
programación. Es por la diferencia en el caso. Entonces, la siguiente consulta convierte el nombre a
minúsculas antes de la comparación.

seleccione el nombre, la duración de los cursos donde


BAJO (nombre) como '% programación%'

NOMBRE DURACIÓN
------------------------------------
Programación en C 20
Programación XML 15

Como NAME se convierte a minúsculas durante la comparación y se compara con la programación, que está en
minúsculas, se ignora la diferencia entre mayúsculas y minúsculas. Se puede lograr el mismo resultado incluso
utilizando la función SUPERIOR. Pero en ese caso la cadena debe estar en mayúsculas - PROGRAMACIÓN.

INITCAP convierte la primera letra de cada palabra a mayúscula y las letras restantes a minúsculas.

seleccione initcap ('esto ES para probar INITCAP') Resultado de


dual;

RESULTADO
---------------------
Esto es para probar Initcap

Función INSTR
INSTR devuelve la posición en la primera cadena donde la segunda cadena comienza en la primera cadena. Si la
segunda cadena no se encuentra en la primera cadena, devuelve 0.

El valor predeterminado es devolver la posición de la primera aparición iniciando la búsqueda en el primer


carácter de la primera cadena. Sin embargo, INSTR tiene opciones mediante las cuales podemos especificar
desde dónde debe comenzar la búsqueda y qué ocurrencia se debe considerar.

srikanthtechnologies.com
Oracle para principiantes Página : 4
Los siguientes ejemplos ilustran el uso de dos parámetros opcionales; inicio y ocurrencia.

seleccione instr ('¿Cómo está?', 'Hacer') Posición de dual;

POSICION
---------5

Aunque la cadena "do" aparece dos veces, se devuelve la posición de la primera aparición. Es posible
especificar a INSTR que debe comenzar a buscar do comenzando desde la posición dada de la siguiente
manera.

seleccionar instr ('Cómo estás', 'hacer', 8) Posición de doble

POSICION
---------
12

Es posible especificar que la posición de la ocurrencia especificada debe devolverse de la siguiente


manera:

seleccionar instr ('Cómo estás', 'hacer', 1,2) Posición


de doble

POSICION
---------
12

Nota: Cuando se especifica la ocurrencia, también se debe especificar la posición de inicio, ya que el tercer
parámetro no se puede omitir mientras se proporciona el cuarto parámetro.

El siguiente ejemplo muestra los detalles de los cursos donde existe la letra p en el nombre del curso
después de 6th posición.

seleccione ccode, nombre


de cursos
donde instr (nombre, 'n')> 6

srikanthtechnologies.com
Oracle para principiantes Página : 5

CCODE NOMBRE

----- ------------------------
C Programación en C
Java Lenguaje Java
xml Programación XML

La misma consulta también se puede escribir de la siguiente manera usando el operador LIKE y seis guiones bajos para
indicar que las primeras seis letras pueden ser cualquier cosa, pero n debe existir después de eso. Pero la versión INSTR
será más flexible.

seleccione ccode, nombre


de cursos
dónde nombre como '______% n%'

CCODE NOMBRE

----- ---------------------------
C Programación en C
Java Lenguaje Java
xml Programación XML

Veremos algunas aplicaciones más de INSTR en una etapa posterior.

Función SUBSTR
SUBSTR se utiliza para extraer una subcadena de la cadena dada. Toma la posición desde donde comienza
la extracción y el número de caracteres a extraer.

El siguiente ejemplo muestra los primeros 2 caracteres del código del curso.

seleccione ccode, substr (ccode, 1,2) sn de los cursos

CCODE SN
----- --
ora o
vbnet vb
C C
áspid como
Java ja
xml xm

Es posible omitir el tercer parámetro: la longitud de la subcadena. El siguiente ejemplo lo ilustra.

srikanthtechnologies.com
Oracle para principiantes Página : 6

seleccione substr ('Srikanth Technologies', 10) Resultado de dual

RESULTADO
------------
Tecnologias

El resultado de una función se puede pasar a otra función como entrada. Ya hemos visto funciones de
anidamiento en el capítulo anterior. Ahora veamos cómo podemos combinar SUBSTR e INSTR para
obtener el nombre de cada facultad. El nombre es el nombre antes del espacio.

seleccione nombre, substr (nombre, 1, instr (nombre, '') - 1) Nombre de la facultad;

NOMBRE PRIMER NOMBRE


------------------------------------------------------
George Koch Jorge
Dan Appleman Dan
Herbert Schildt Herbert
David Hunter David
Stephen Walther Stephen
Kevin Loney Kevin
Jamie Jaworski Jamie
Jason Couchman Jason

La función INSTR se utiliza para averiguar la posición del primer espacio. Luego, esa posición se usa para
especificar el número de caracteres que se tomarán del nombre. Restamos uno de la posición porque la
posición indica la posición del espacio, pero tenemos que tomar el carácter antes del espacio.

El siguiente es otro ejemplo de estas dos funciones. Lleva apellido de la facultad.

seleccione nombre, substr (nombre, instr (nombre, '') + 1) Apellido de la facultad

NOMBRE APELLIDO
------------------------------------------------------
George Koch Koch
Dan Appleman Appleman
Herbert Schildt Schildt
David Hunter Cazador
Stephen Walther Walther
Kevin Loney Loney
Jamie Jaworski Jaworski
Jason Couchman Couchman

srikanthtechnologies.com
Oracle para principiantes Página : 7

La siguiente es la secuencia de pasos en la consulta anterior.

INSTR devuelve la posición del primer espacio en NAME

El valor de retorno de INSTR, después de agregar 1, se pasa a SUBSTR como la posición inicial.

Todo lo que está a la derecha de la posición dada es tomado por SUBSTR

Dado que Oracle convierte los valores dados al tipo de datos requerido automáticamente, INSTR y
SUBSTR también se pueden usar con números y fechas. La siguiente consulta muestra los pagos
realizados en el mes de abril.

seleccione * de pagos donde instr


(dp, 'APR') <> 0

ROLLNO DP MONTO
-------------------------
9 07-ABR-01 3000
10 10-ABR-01 4500
11 07-ABR-01 1000
11 10-ABR-01 3500

Recortar cuerdas
LTRIM y RTRIM se utilizan para recortar caracteres no deseados de los extremos izquierdo y derecho de la cadena,
respectivamente. Los espacios más a la izquierda se denominan espacios iniciales y los espacios situados más a la
derecha se denominan espacios finales.

Recortan espacios por defecto. Opcionalmente, puede especificar qué conjunto de caracteres desea recortar.

El siguiente ejemplo se usa para recortar espacios a la izquierda usando IZQUIERDA. La longitud de la cadena
mostrará el resultado.

seleccionar longitud ('abc xyz ') Antes,


longitud (ltrim ('abc xyz de dual ')) Después

ANTES DE DESPUÉS
-----------------
13 11

srikanthtechnologies.com
Oracle para principiantes Página : 8

También puede recortar un conjunto específico de caracteres como se muestra a continuación.

seleccione ltrim ('aabcbadxyabc', 'abc') Resultado de dual

RESULTADO
------
dxyabc

En el ejemplo anterior, el recorte se detuvo en 'd' porque 'd' es el primer carácter que no cae en el
conjunto de caracteres de 'abc'.

Mientras se recorta, se toma cada carácter de izquierda o derecha y se compara con los personajes del conjunto.
Si el carácter es el mismo que cualquier carácter del conjunto de caracteres, el carácter se recorta; de lo contrario,
el recorte termina en ese carácter. Lo mismo ocurre con la función RTRIM, pero se recorta a la derecha.

La función TRIM, que se introdujo en Oracle8i, se utiliza para recortar los espacios iniciales y finales.

seleccionar longitud ('abc xyz') Antes,


length (trim ('abc xyz')) Después de dual

ANTES DE DESPUÉS
-----------------
12 8

Acolchado de cuerdas
Se puede hacer una cuerda de una longitud determinada rellenando a la izquierda con LPAD o a la derecha con
RPAD. De forma predeterminada, Oracle usa espacio para rellenar cadenas. Sin embargo, es posible especificar
qué caracteres deben usarse para el relleno.

El siguiente curso de ejemplo de 12 caracteres especifica que el punto se utilizará para el relleno.

seleccione rpad (nombre, 12, '.') Nombre de los cursos

srikanthtechnologies.com
Oracle para principiantes Página : 9
NOMBRE

------------
Oracle datab
VB.NET ......
Programa C min
ASP.NET .....
Java Language
Programa XML

El ejemplo anterior es el relleno de cadenas de menos de 12 caracteres y el truncamiento de cadenas de


más de 12 caracteres. Nombres como VB.NET y ASP.NET se rellenan a la derecha con puntos. Mientras
que los nombres como la base de datos Oracle y la programación en C se truncan a 12 caracteres.

Nota: RPAD y LAPD truncan la cadena dada si la cadena tiene más caracteres que la longitud dada.

Funciones TRADUCIR y REEMPLAZAR


Estas dos funciones devuelven la cadena después de modificar la cadena dada. TRANSLATE funciona
con caracteres individuales, mientras que REPLACE reemplaza una cadena con otra cadena.

Los siguientes dos ejemplos aclararán la diferencia.

seleccione reemplazar ('ABC ABAC XYZ DABC', 'ABC', 'PQR') Resultado de doble

RESULTADO
----------------
PQR ABAC XYZ DPQR

REPLACE reemplaza cada aparición de la cadena 'ABC' con la cadena 'PRQ'.

seleccione traducir ('ABC ABAC XYZ DABC', 'ABC', 'PQR') Resultado de dual

RESULTADO
----------------
PQR PQPR XYZ DPQR

TRANSLATE cambia cada aparición de la letra A con P, B con Q y C con R.

srikanthtechnologies.com
Oracle para principiantes Página : 10
Funciones de conversión
Las funciones de conversión se utilizan para convertir un valor de un tipo de datos a otro. Estas funciones
no son necesarias si Oracle puede convertir automáticamente el valor. Pero hay casos en los que se
requieren estas funciones de conversión para convertir el valor al tipo de datos requerido. La siguiente
tabla enumera las funciones de conversión.

FUNCIÓN DESCRIPCIÓN
TO_CHAR (valor [, formato]) Convierte el valor, que es de tipo DATE o NUMBER, en tipo
CHAR.
TO_DATE (carácter [, formato]) Convierte el valor del tipo CHAR dado en el tipo DATE.
TO_NUMBER (carácter) Convierte el valor del tipo CHAR dado en el tipo NUMBER.
Tabla 2: Funciones de conversión.

Antes de entender cómo y dónde usamos las funciones de conversión, veamos cómo Oracle intenta
convertir los datos dados al tipo de datos requerido.

Conversión automática de tipos


Oracle convierte automáticamente el valor al tipo de datos requerido si es posible. Por ejemplo,
si se usa un número con la función de cadena, el número se convierte en cadena y luego se
ejecuta la función.

De la misma manera, si se requiere un valor de tipo DATE pero si se da un valor de tipo


CHAR en el formato DD-MON-YY o DD-MON-YYYY, Oracle lo convierte al tipo DATE.

Pero esta conversión automática de tipos de datos no siempre es posible. Para convertir el valor al
tipo de datos requerido, el valor dado ya debe parecerse al tipo de datos al que se está
convirtiendo. Las siguientes son pautas que describen la conversión automática de tipos.

srikanthtechnologies.com
Oracle para principiantes Página : 11

DIRECTRICES PARA LA CONVERSIÓN AUTOMÁTICA DE TIPO DE DATOS

Cualquier NÚMERO o FECHA se convertirá en un CHAR. Si

FECHA es un literal, escríbalo entre comillas.

El tipo CHAR se convertirá a NUMBER si contiene solo dígitos, punto decimal o signo menos a la
izquierda.
CHAR se convertirá al tipo DATE si está en formato DD-MON-YY o DD-MON-YYYY. UNA FECHA
NO se convertirá en NUMBER.
UN NÚMERO NO se convertirá al FECHA.

Los siguientes ejemplos le darán una mejor idea sobre la conversión automática del tipo de datos:

En el siguiente ejemplo, NUMBER se convierte automáticamente a CHAR antes de que se utilice la función
LENGTH.

seleccione la longitud (1133) de dual;

LONGITUD (1133)
------------4

En el siguiente ejemplo, una FECHA dada en formato CHAR se convierte a FECHA antes de que se aplique la
función LAST_DAY.

seleccione last_day ('20 -aug-2001 ') de dual;

ÚLTIMO DÍA(
---------
31-AGO-01

De manera similar, es posible utilizar un valor CHAR cuando se requiere un NÚMERO, como se muestra a continuación.

seleccione 5 * '20' de dual;

5 * '20 '
---------
100

srikanthtechnologies.com
Oracle para principiantes Página : 12
A continuación, se muestran algunos ejemplos en los que Oracle no puede convertir automáticamente el valor.

SQL> seleccione next_day ('12 -1-2001 ',' Vie ') de dual; seleccione
next_day ('12 -1-2001 ',' Vie ') de dual
*
ERROR en la línea 1: ORA-01843: no
es un mes válido

Oracle devuelve un error que indica que la fecha no tiene un mes válido porque Oracle espera que los
meses sean de las primeras tres letras del nombre del mes. Como solo hemos proporcionado el número
del mes, Oracle no lo acepta. En este caso, necesitamos convertir explícitamente el valor al tipo DATE
usando la función TO_DATE.

Las siguientes secciones mostrarán cómo utilizar las funciones de conversión.

Función TO_CHAR
Esta función se utiliza para convertir la FECHA o NÚMERO dados al tipo CHAR. La función TO_CHAR
también se puede usar para formatear la fecha o el número dado mientras se convierte el valor al tipo
CHAR. Por ejemplo, para mostrar la fecha en formato DD-MM-AAAA en lugar del formato estándar - DD-
MON-YY, ingrese lo siguiente:

seleccione to_char (sysdate, 'dd-mm-aaaa') Resultado de dual

RESULTADO
----------
15-08-2000

De hecho, TO_CHAR es una de las funciones más utilizadas. Aquí, en el ejemplo, a continuación, se utiliza para
mostrar la fecha y la hora de SYSDATE. Recuerde que esta operación necesita el uso explícito de TO_CHAR ya
que, de forma predeterminada, Oracle solo muestra la fecha.

seleccione to_char (sysdate, 'dd Month yyyy hh24: mi: ss') de dual

TO_CHAR (SYSDATE, 'DDMONTHYY


------------------------
15 de agosto de 2000 02:18:56

En el ejemplo anterior, el mes representa el nombre completo del mes, yyyy representa el año de
cuatro dígitos, hh24 las horas basadas en 24 horas, mi minutos y ss los segundos.

La función Formato en TO_CHAR es una colección de más de 40 opciones de formato. Consulte la Tabla 3 para obtener
más opciones. Para obtener una lista completa, consulte la ayuda en línea para los elementos de formato de fecha.

srikanthtechnologies.com
Oracle para principiantes Página : 13
Todas las opciones del formato se reemplazan con los valores correspondientes y los caracteres restantes
se devuelven tal cual. En el ejemplo anterior, ':' entre HH24 y MI se devuelve tal cual, pero HH24 y MI se
reemplazan con los valores correspondientes.

Opción de formato Descripción


MM Número del mes: 10
LUN Primeras tres letras del nombre del mes:
MES OCT Nombre completo del mes: OCTUBRE
DDD Día del año desde el 1 de enero: 340 Día del
DD mes: 16
D Día de la semana: 5
Día Día completamente escrito: Miércoles
AAAA Año de cuatro dígitos: 1996
YY Año de dos dígitos: 96
AÑO Año enunciado: NOVENTA Y SEIS Hora del
HH o HH12 día: 5
HH24 Hora del día: 20 Minuto
MI de hora: 30 Segundo de
SS minuto: 30
AM o PM Muestra AM o PM según la hora. Elimina los espacios finales.
Fm 'Mayo' se convierte en 'mayo'
TH Sufijo al número: DDTH producirá 16th
SP Número escrito: DDSP producirá un TERCER para el día 3.
Tabla 3: formatos TO_CHAR y TO_DATE.

La siguiente consulta recupera detalles de los estudiantes que se han incorporado en el mes de abril del
año 2001.

Seleccione bcode, nombre de los estudiantes to_char


dónde (dj, 'mmyyyy') = '042001';

BCODE NOMBRE

----- ---------------------------
b5 Richard Marx
b5 Tina Turner
b5 Jody Foster

En el siguiente ejemplo, TO_CHAR se utiliza para mostrar el nombre del mes del año. Sin embargo, como puede
ver en la salida, hay espacios al final después del nombre del mes. Esto se debe a que Oracle rellena el nombre
con 9 caracteres. Los meses que tienen un nombre más pequeño que ese tendrán espacios al final.

srikanthtechnologies.com
Oracle para principiantes Página : 14

seleccione bcode, name, to_char (dj, 'dd-Month-yyyy') dj de los estudiantes

BCODE NAME DJ
----------------------------------------------
b1 George Micheal 10-enero - 2001
b1 Micheal Douglas 11-enero - 2001
b2 Andy Roberts 11-enero - 2001
b2 Malcom Marshall 16 de enero - 2001
b2 Vivan Richards 16 de enero - 2001
b3 Chirs Evert 14-enero - 2001
b3 Ivan Lendal 15-enero - 2001
b4 George Micheal 01-marzo - 2001
b5 Richard Marx 06-abril - 2001
b5 Tina Turner 06-abril - 2001
b5 Jody Foster 07-abril - 2001

El formato fm se puede utilizar para eliminar estos espacios finales en el nombre de los meses. Aquí está la versión
revisada de la consulta anterior.

seleccione bcode, name, to_char (dj, 'dd-fmMonth-yyyy') dj de los estudiantes

BCODE NAME DJ
----------------------------------------------
b1 George Micheal 10 de enero de 2001
b1 Micheal Douglas 11 de enero de 2001
b2 Andy Roberts 11 de enero de 2001
b2 Malcom Marshall 16 de enero de 2001
b2 Vivan Richards 16 de enero de 2001
b3 Chirs Evert 14 de enero de 2001
b3 Ivan Lendal 15 de enero de 2001
b4 George Micheal 01-marzo-2001
b5 Richard Marx 06-abril-2001
b5 Tina Turner 06-abril-2001
b5 Jody Foster 07-abril-2001

Nota: La salida de TO_CHAR estará en el mismo caso que el formato. Por ejemplo, si se indica Mes, la salida
será abril; si se da MES, la salida será ABRIL.

Función TO_DATE
TO_DATE se utiliza para convertir un valor de tipo CHAR en tipo DATE. Si el valor está en formato DD-MON-
YY o DD-MM-YYYY, entonces TO_DATE no es necesario porque Oracle convierte implícitamente el valor al
tipo DATE.

srikanthtechnologies.com
Oracle para principiantes Página : 15
Cuando inserta un registro con solo la fecha en formato DD-MON-YY, la parte de la hora de la fecha se
establece en 00:00:00. El siguiente INSERT inserta una nueva fila en la tabla PAYMETS con fecha y hora.

insertar en pagos
valores (10, to_date ('14-04-2001 10:20:00 ',
'dd-mm-aaaa hh24: mi: ss'), 2000);

Es importante asegurarse de que los valores proporcionados coincidan con el formato. Eso significa, en el
ejemplo anterior, como dimos dd-mm-aaaa hh24: mi: ss como la formación, incluso los datos se darán en
el mismo formato. El formato informa a Oracle cómo interpretar los valores dados. Si hay alguna
discrepancia, los valores pueden malinterpretarse.

Las opciones de formato son las mismas que las opciones de formato de la función TO_CHAR. Consulte la Tabla 3 para conocer las opciones de
formato disponibles.

Función TO_NUMBER
Esta función es necesaria solo en dos ocasiones. Los siguientes son los dos casos.

Para convertir un número formateado en número. Para

ordenar los datos CHAR en orden numérico.

La primera aplicación de TO_NUMBER es convertir un número formateado en un número. El siguiente


ejemplo intenta multiplicar $ 333 por 20. Pero como Oracle no toma el número con el símbolo de moneda
como un número, da como resultado un error.

SQL> seleccione $ 333 * 20 de dual;


seleccione $ 333 * 20 de doble
*
ERROR en la línea 1: ORA-00911:
carácter no válido

La función TO_NUMBER se puede utilizar para convertir $ 333 en un número para que Oracle lo trate
como un número. El formato en TO_NUMBER especificó que el primer carácter debe tomarse como
símbolo de moneda y permanecer como dígitos.

SQL> seleccione to_number ('$ 333', '$ 999') * 20 de dual

TO_NUMBER ('$ 333', '$ 999') * 20


-------------------------
6660

srikanthtechnologies.com
Oracle para principiantes Página : dieciséis

Clasificación de cadenas en orden numérico


Otro uso de TO_NUMBER es ordenar una columna que contiene números pero almacenados en forma
de tipo CHAR.

Suponga que los siguientes datos existen en la columna VNO de la tabla VEHÍCULOS. La columna VNO se
define como VARCHAR2 (10).

SQL> seleccione vno de vehículos;

VNO
----------
1133
1583
2502
5657
9
234
45

El siguiente SELECT ordena los datos pero ordena la columna VNO como una colección de cadenas. Eso
significa que los valores numéricos no se tienen en cuenta y los números se toman como una colección de
caracteres (cada dígito es un carácter).

seleccione vno del pedido de vehículos por vno;

VNO
----------
1133
1583
234
2502
45
5657
9

La salida muestra que el número 9 está en la parte inferior. Esto se debe a la forma en que se comparan las
cadenas en la clasificación: primer carácter primero y luego segundo carácter y así sucesivamente.

Para ordenar los datos usando un valor numérico, emita el siguiente comando donde la columna VNO se
convierte en un número antes de que se ordene usando la función TO_NUMBER.

seleccione vno del pedido de vehículos por to_number (vno);

srikanthtechnologies.com
Oracle para principiantes Página : 17
VNO
----------
9
45
234
1133
1583
2502
5657

Veremos mucho uso de la función de conversión TO_CHAR en el resto del libro.

Funciones misceláneas
Las funciones misceláneas son las funciones que se pueden utilizar con cualquier tipo de datos. Consulte la tabla 4 para
la lista de funciones diversas.

Función Descripción
DECODE (expresión, cond, valor, Si la expresión es equivalente a la primera condición, entonces la primera

cond, valor, ..., elsevalue) value se devuelve; de lo contrario, Oracle verifica si la


expresión es equivalente a la segunda cond y luego se
devuelve el segundo valor. Si la expresión no coincide con
ninguno de los valores, se devuelve elsevalue. Devuelve el
MAYOR (valor1, valor2, ...) mayor de los valores dados.
MENOS (valor1, valor2, ...) NVL Devuelve el menor valor de los valores dados. Devuelve

(valor1, valor2) value2 si value1 es nulo; de lo contrario, devuelve value1.

Tabla 4: Funciones varias.

Los siguientes ejemplos le mostrarán cómo utilizar diversas funciones.

Función DECODIFICAR
Esta función funciona como una instrucción IF múltiple o una instrucción CASE / SWITCH en un lenguaje de
programación típico.

Toma un valor y lo compara con los valores dados uno por uno. Siempre que el valor sea equivalente
al valor dado, devuelve el valor correspondiente.

El siguiente ejemplo muestra cómo decodificar la tabla GRADE of COURSE_FACULTY.

srikanthtechnologies.com
Oracle para principiantes Página : 18

seleccione fcode, ccode, decode (grado, 'A', 'Muy bueno',


'B', 'Bueno',
'C', 'Promedio',
'Desconocido') Grado
de course_faculty

FCODE CCODE GRADO


---------------------
Gk ora Muy bien
kl ora Muy bien
jc ora Muy bien
da vbnet Muy bueno
sudoeste áspid Muy bien
da áspid Bien
hs C Muy bien
dh xml Muy bien
jj Java Muy bien
hs Java Bien
jj C Muy bien
jj vbnet bueno

La función se utiliza para mostrar texto significativo para la columna GRADE, que contiene solo A, B o
C.

El siguiente ejemplo muestra otro uso de DECODE donde mostramos la remuneración total pagada al
profesorado. Suponiendo que el pago se basa en la hora del lote y no. de días del lote.

seleccione bcode, ccode, fcode, stdate, enddate, decode (timing, 1,200,2,150,175) * (enddate-
stdate) Cantidad de lotes donde enddate no es nulo

BCODE CCODE FCODE STDATE FECHA FINAL MONTO


--------------------------------------
b1 ora Gk 12-ENE-01 20-FEB-01 7800
b2 áspid da 15-ENE-01 05-MAR-01 7350
b3 C hs 20-ENE-01 27-FEB-01 6650
b4 xml dh 02-MAR-01 30-MAR-01 4900
b5 Java hs 05-ABR-01 10-MAY-01 7000

srikanthtechnologies.com
Oracle para principiantes Página : 19
Funciones MÁS GRANDES y MENOS
Estas funciones toman una colección de valores y devuelven un único valor que es el menor o el mayor de
los valores dados, según sea el caso.

MÁS GRANDE se utiliza para devolver el mayor de los valores dados y MENOS el más pequeño de los valores
dados.

El siguiente ejemplo muestra el descuento que se otorgará a cada curso. El esquema consiste en otorgar
un descuento del 10% sobre la tarifa del curso o 500, lo que sea mayor. La siguiente consulta con la
función MÁS GRANDE logrará el resultado.

seleccione ccode, nombre, mayor (tarifa * 0.10,500) Descuento de cursos;

CCODE NOMBRE DESCUENTO


----- ------------------------------------
ora Base de datos Oracle 500
vbnet VB.NET 550
C Programación en C 500
áspid ASP.NET 500
Java Lenguaje Java 500
xml Programación XML 500

La función MENOS se puede utilizar de la misma manera pero establece el límite superior. En la
siguiente consulta, el descuento es del 10% de la tarifa del curso o 500, lo que sea menor.

seleccione ccode, nombre, mínimo (tarifa * 0.10,500) Descuento de cursos

CCODE NOMBRE DESCUENTO


----- ------------------------------------
ora Base de datos Oracle 450
vbnet VB.NET 500
C Programación en C 350
áspid ASP.NET 500
Java Lenguaje Java 450
xml Programación XML 400

Nota: MAYOR y MENOS no tratarán el literal de cadena que esté en formato de fecha como fecha. En cambio,
estas fechas se toman como cadenas.

El siguiente ejemplo muestra cómo estas dos funciones tratan las fechas que se dan en formato de fecha
pero como cadenas.

srikanthtechnologies.com
Oracle para principiantes Página : 20

seleccione el mayor ('12 -jun-2001 ',' 17-mar-2001 ') de dual

MÁS GRANDE ('1


-----------
17-mar-2001

El comando anterior devuelve '17 -mar-2001 'en lugar de '12 -jun-2001' porque cuando estos dos se tratan
como cadenas, el valor en la segunda posición en la primera cadena (7) es mayor que el valor
correspondiente en la primera cadena (2 ), por lo que 17-mar-2001 se devuelve como el mayor valor.

Función NVL
Se utiliza para devolver el segundo valor si el primer valor es nulo. Esta función tiene mucha importancia ya que
Oracle devuelve un valor nulo de cualquier expresión que contenga un valor nulo.

Nota: Cualquier expresión que involucre un valor nulo resultará en un valor nulo.

La siguiente consulta es para mostrar los detalles de todos los lotes. Pero no obtenemos nada, en realidad un
valor nulo, para NODAYS de los lotes b6 y b7, ya que tienen un valor nulo en ENDDATE. Dado que Oracle da
como resultado un valor nulo para cualquier expresión que tenga un valor nulo, el resultado de ENDDATE-
STDATE es un valor nulo.

seleccione bcode, stdate, enddate - stdate nodays de los lotes;

BCODE STDATE NODAYS


---------------------
b1 12-ENE-01 39
b2 15-ENE-01 49
b3 20-ENE-01 38
b4 02-MAR-01 28
b5 05-ABR-01 35
b6 12-JUL-01
b7 15-AGO-01

Sin embargo, ahora queremos tomar la fecha de finalización si se completa el lote; de lo contrario, queremos tomar la fecha del
sistema como fecha de finalización.

seleccione bcode, stdate, nvl (enddate, sysdate) - stdate nodays de los lotes;

BCODE STDATE NODAYS


---------------------
b1 12-ENE-01 39
b2 15-ENE-01 49
b3 20-ENE-01 38

srikanthtechnologies.com
Oracle para principiantes Página : 21
b4 02-MAR-01 28
b5 05-ABR-01 35
b6 12-JUL-01 50.17985
b7 15-AGO-01 16.17985

Ahora queremos incluir incluso el estado del lote, que se COMPLETARÁ si


ENDDATE no es nulo de lo contrario EN EJECUCIÓN.

seleccione bcode, stdate, nvl (enddate, sysdate) - stdate nodays,


decodificar (fecha de finalización, nulo, 'En ejecución', 'Completado') Estado de los lotes;

BCODE STDATE ESTADO DE NODAYS


-----------------------------
b1 12-ENE-01 39 Completado
b2 15-ENE-01 49 Completado
b3 20-ENE-01 38 Completado
b4 02-MAR-01 28 Completado
b5 05-ABR-01 35 Completado
b6 12-JUL-01 50.1811 Corriendo
b7 15-AGO-01 16.1811 Corriendo

Resumen
Las funciones de cadena manipulan cadenas. Las funciones de conversión se utilizan para convertir el tipo de
datos de un valor de uno a otro. De hecho, Oracle siempre intenta convertir el valor dado al tipo de datos
requerido. Pero en algunos casos, como Oracle no puede convertir implícitamente, las funciones de conversión
deben usarse para convertir el valor al tipo de datos requerido.

Se pueden utilizar varias funciones como DECODE y NVL con cualquier tipo de datos. DECODE es una
estructura if-elseif-else. NVL devuelve el primer valor si no es nulo o el segundo valor si el primer valor es
nulo.

Ejercicios
1. La función ______ realiza una sustitución de caracteres uno a uno.
2. La opción de formato ______ se usa para obtener el año completo en la función TO_CHAR.
3. El símbolo _____ se usa para concatenar cadenas.
4. ¿Qué sucede si no se proporciona 'reemplazar cadena' para las funciones REPLACE.

srikanthtechnologies.com
Oracle para principiantes Página : 22
5. ¿Se puede convertir un NUMBER a DATE? [Sí No] _____.
6. ¿Cómo se cambia el nombre de cada estudiante a mayúsculas en la tabla ESTUDIANTES? Muestre
7. los nombres de los estudiantes que tienen más de 15 caracteres en el nombre. Muestre primero
8. el 'nombre' de los estudiantes y el 'segundo nombre'.
Por ejemplo, Louis Figo debería mostrarse como Figo Louis.
9. Muestre los detalles de los estudiantes que tienen más de 10 caracteres en el nombre.
10. ¿Cuál es el resultado de CANTIDAD - DESCUENTO si la columna DESCUENTO es nula?

11. ¿Cómo se obtiene la posición de 5?th aparición de la letra 'o' en el nombre del estudiante.

12. ¿Cuál será el resultado de seleccionar '10' * '20' de dual;

srikanthtechnologies.com

También podría gustarte