Sie sind auf Seite 1von 42

Funciones de cadena

Las funciones de cadena realizan diversas manipulaciones de caracteres. Actúan en las cadenas de caracteres.

Función Ejemplo Descripción


Ascii Ascii('a') Convierte una cadena de un solo carácter en el código A
caracteres, se devuelve el código ASCII correspondient

Bit_Length Bit_Length('abcdef') Devuelve la longitud, en bits, de una cadena especificad

Char Char(35) Convierte un valor numérico entre 0 y 255 en el valor d

Char_Length Char_Length(Customer_Name) Devuelve la longitud, en número de caracteres, de una c


la cadena.

Concat SELECT DISTINCT Concat ('abc', 'def') FROM employee Concatena dos cadenas de caracteres.

Insert SELECT Insert('123456', 2, 3, 'abcd') FROM table Inserta una cadena de caracteres determinada en una ub

Left SELECT Left('123456', 3) FROM table Devuelve un número de caracteres especificado a la izq

Length Length(Customer_Name) Devuelve la longitud, en número de caracteres, de una c


blanco.

Locate Locate('d' 'abcdef') Devuelve la posición numérica de una cadena de caract


cadena en que se está buscando, la función devuelve un

LocateN Locate('d' 'abcdef', 3) Al igual que Locate, devuelve la posición numérica de


argumento de entero que permite especificar una posici

Lower Lower(Customer_Name) Pasa a minúsculas una cadena de caracteres.


Función Ejemplo Descripción
Octet_Length Octet_Length('abcdef') Devuelve el número de bytes de una cadena especificad

Position Position('d', 'abcdef') Devuelve la posición numérica de strExpr1 en una e

Repeat Repeat('abc', 4) Repite una expresión especificada n veces.

Replace Replace('abcd1234', '123', 'zz') Reemplaza uno o más caracteres de una expresión de ca

Right SELECT Right('123456', 3) FROM table Devuelve un número especificado de caracteres a la der

Space Space(2) Inserta espacios en blanco.

Substring Substring('abcdef' FROM 2) Crea una nueva cadena que empieza en un número fijo

SubstringN Substring('abcdef' FROM 2 FOR 3) Al igual que Substring, crea una nueva cadena que emp

SubstringN incluye un argumento de entero que permit

TrimBoth Trim(BOTH '_' FROM '_abcdef_') Elimina los caracteres iniciales y finales especificados d

TrimLeading Trim(LEADING '_' FROM '_abcdef') Elimina los caracteres iniciales especificados de una ca

TrimTrailing Trim(TRAILING '_' FROM 'abcdef_') Elimina los caracteres finales especificados de una cade

Upper Upper(Customer_Name) Pasa a mayúsculas una cadena de caracteres.

Funciones de manipulación de cadenas: Oracle


Publicado por sirchokolate el 28 de agosto de 2010
Las funciones de caracteres y cadenas, en la mayoría de los casos se tienen que tener muy en mente ya que son de uso continuo en el trabajo, en este articulo,
listo algunas de las funciones de Oracle, exclusivas para el manejo de cadenas y hago una breve reseña de cada una de ellas, entre paréntesis te indico con qué
frecuencia las utilizo en el trabajo diario(Baja, Media y Alta):

Character / String Functions:

Ascii Convert Lower Soundex

AsciiStr Decompose Lpad Substr

Chr Dump Ltrim Translate

Compose Initcap Replace Trim

Concat Instr Rpad Upper

Concat with || Length Rtrim VSize

FUNCION ASCII
En Oracle y PL/SQL, la función ASCII devuelve el código numérico que representa el carácter pasado por parámetro. La sintaxis es la siguiente:
ASCII(CARÁCTER_SIMPLE)
CARÁCTER_SIMPLE es el carácter especificado para el cual se devolvera el codigo ascii. Si mas de un carácter es ingresado como parametro a la funcion esta
solo devolvera el valor ascii para el primer carácter de la cadena e ignorara todos los demas caracteres despues del primero. Te adjunto la tabla ascii en un
archivo de WORD.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT ASCII(‘t’) FROM DUAL; –Devuelve 116
 SELECT ASCII(‘T’) FROM DUAL; –Devuelve 84
 SELECT ASCII(‘T2’) FROM DUAL;–Devuelve 84
Regresar al indice de funciones
FUNCION ASCIISTR
En Oracle y PL/SQL, la función ASCIISTR convierte una cadena en algún conjunto de caracteres a una cadena ASCII usando el conjunto de caracteres de la
base de datos, las bases de datos utilizan algún conjunto de caracteres para poder guardar los datos dentro de las tablas. Algunos de los conjuntos de caracteres
más comunes son el US7ASCII(UTF8) y el WE8ISO8859P1(ISO8859-1). La sintaxis es la siguiente:
ASCIISTR(CADENA)
CADENA es cualquier cadena o conjunto de caracteres que tu quieres convertir de una cadena ASCII a el conjunto de caracteres de la base de datos
APLICA PARA:
 Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT ASCIISTR(‘A B C Ä Ê’) FROM DUAL; –Devuelve ‘A B C 0C4 0CA’
 SELECT ASCIISTR(‘A B C Õ Ø’) FROM DUAL; –Devuelve ‘A B C 0D5 0D8’
 SELECT ASCIISTR(‘A B C Ä Ê Í Õ Ø’) FROM DUAL –Devuelve ‘A B C 0C4 0CA 0CD 0D5 0D8’
Regresar al indice de funciones
FUNCION CHR
En Oracle y PL/SQL, la función CHR es lo opuesto de la función ASCII. Esta función devuelve un carácter basada en el código numérico pasado por parámetro.
La sintaxis es la siguiente:
CHR(CODIGO_NUMERICO)
CODIGO_NUMERICO es el codigo numerico del carácter que se desea obtener. Te adjunto la tabla ascii en un archivo de WORD.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT CHR(116) FROM DUAL;–Devuelve t
 SELECT CHR(84) FROM DUAL; –Devuelve T
Regresar al indice de funciones
FUNCION COMPOSE
En Oracle y PL/SQL, la función COMPOSE devuelve una cadena Unicode para la cadena pasada por parámetro. La sintaxis es la siguiente:
COMPOSE(CADENA)
CADENA es el valor usado para crear la cadena unicode. Esta cadena puede ser de tipo char, varchar2, nchar, nvarchar2, clob o nclob. A continuación esta una
lista de valores unistring que pueden ser combinados con otros caracteres en la función COMPOSE.

Valor
Unistring Carácter resultante

unistr(‘300’
) grave accent ( ` )

unistr(‘301’
) acute accent ( ´ )

unistr(‘302’
) circumflex ( ^ )

unistr(‘303’
) tilde ( ~ )
unistr(‘308’
) umlaut ( ¨ )

APLICA PARA:
 Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT COMPOSE(‘o’ || UNISTR(‘308’)) FROM DUAL; –Devuelve ö
 SELECT COMPOSE(‘a’ || UNISTR(‘302’)) FROM DUAL; –Devuelve â
 SELECT COMPOSE(‘e’ || UNISTR(‘301’)) FROM DUAL; –Devuelve é
Regresar al indice de funciones
FUNCION CONCAT
En Oracle y PL/SQL, la función CONCAT pemite concatenar dos cadenas y juntarlas en una sola. La sintaxis es la siguiente:
CONCAT(CADENA1, CADENA2)
CADENA1 es la primera cadena a concatenar.
CADENA2 es la segunda cadena a concatenar.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT CONCAT(‘Este es’, ‘un ejemplo’) FROM DUAL; –Devuelve “Este es un ejemplo”
 SELECT CONCAT(‘A’, ‘b’) FROM DUAL; –Devuelve “Ab”
Regresar al indice de funciones
CONCATENAR CON EL OPERADOR ||
En Oracle y PL/SQL, el operador || pemite concatenar dos o más cadenas y juntarlas en una sola. La sintaxis para el operador || es la siguiente:
CADENA1 || CADENA2 || CADENA_N
CADENA1 es la primera cadena a concatenar.
CADENA_N es la enesima cadena a concatenar.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT ‘Este es’ || ‘un ejemplo’ FROM DUAL; –Devuelve “Este es un ejemplo”
 SELECT ‘A’ || ‘b’ || ‘c’ FROM DUAL; –Devuelve “Abc”
Regresar al indice de funciones
FUNCION CONVERT
En Oracle y PL/SQL, la función CONVERT convierte una cadena de un conjunto de caracteres a otro. La sintaxis es la siguiente:
CONVERT(CADENA1, CONJUNTO_DE_CARACTERES_RESULTANTE, CONJUNTO_DE_CARACTERES_ORIGINAL)
CADENA1 es cadena a ser convertida.
CONJUNTO_DE_CARACTERES_RESULTANTE  es conjunto de caracteres al cual se convertira CADENA1.
CONJUNTO_DE_CARACTERES_ORIGINAL  es conjunto de caracteres actual de CADENA1.
Entre el conjunto de caracteres aplicables para esta funcion estan los siguientes:

Conjunto de
caracteres Descripción

US7ASCII US 7-bit ASCII character set

WE8DEC West European 8-bit character set

HP West European Laserjet 8-bit


WE8HP character set

F7DEC DEC French 7-bit character set


IBM West European EBCDIC Code Page
WE8EBCDIC500 500

WE8PC850 IBM PC Code Page 850

ISO 8859-1 West European 8-bit


WE8ISO8859P1 character set

APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:

 SELECT CONVERT(‘A B C D E Ä Ê Í Õ Ø’, ‘US7ASCII’, ‘WE8ISO8859P1’) FROM DUAL; –Devuelve ‘A B C D E A E I ? ?’

Regresar al indice de funciones


FUNCION DECOMPOSE
En Oracle y PL/SQL, la función DECOMPOSE acepta una cadena y devuelve como resultado una cadena Unicode. La sintaxis es la siguiente:
DECOMPOSE(CADENA)
CADENA es la cadena que sera convertida a cadena unicode.
APLICA PARA:
 Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT DECOMPOSE(‘Très bien’) FROM DUAL; –Devuelve “Très bien”
 SELECT DECOMPOSE(‘é’) FROM DUAL; –Devuelve “é”
 SELECT DECOMPOSE(‘olé’) FROM DUAL; –Devuelve “olé”
Regresar al indice de funciones
FUNCION DUMP
En Oracle y PL/SQL, la función DUMP devuelve un valor varchar2 que incluye los códigos de tipo de dato, la longitud en bytes y la representación interna de la
expresion. La sintaxis es la siguiente:
DUMP(EXPRESION, [FORMATO_A_DEVOLVER], [POSICION_INICIAL], [LONGITUD])
EXPRESION es la o expresion a analizar.
FORMATO_A_DEVOLVER  es opcional. Determina el formato del valor a devolver. Este parametro puede estar seguido de los siguientes valores.

Valo
r Explicación

8 Notación octal

10 Notación decimal

16 Notación hexadecimal

17 Solo caracteres

Notación octal junto con el conjunto de


1008 caracteres

1010 Notación decimal junto con el conjunto de


caracteres

Notación hexadecimal junto con el conjunto


1016 de caracteres

Solo caracteres junto con el conjunto de


1017 caracteres

POSICION_INICIAL Y LONGITUD  son parametros opcionales. Ellos determinan cual porcion de la representacion interna se mostrara en el resultado. Si estos
parametros son omitidos, la funcion DUMP mostrara la representacion interna devuelta en notacion decimal.
EXPRESION es la o expresion a analizar.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT DUMP(‘Tech’) FROM DUAL;          –Devuelve ‘Typ=96 Len=4: 84,101,99,104’
 SELECT DUMP(‘Tech’,10) FROM DUAL;       –Devuelve ‘Typ=96 Len=4: 84,101,99,104’
 SELECT DUMP(‘Tech’,16) FROM DUAL;       –Devuelve ‘Typ=96 Len=4: 54,65,63,68’
 SELECT DUMP(‘Tech’,1016) FROM DUAL;     –Devuelve ‘Typ=96 Len=4 CharacterSet=WE8ISO8859P1: 54,65,63,68’ <- Puede variar dependiendo del
conjunto de caracteres de la base de datos
 SELECT DUMP(‘Tech’,1017) FROM DUAL;     –Devuelve ‘Typ=96 Len=4 CharacterSet=WE8ISO8859P1: T,e,c,h <- Puede variar dependiendo del
conjunto de caracteres de la base de datos
Regresar al indice de funciones
FUNCION INITCAP
En Oracle y PL/SQL, la función INITCAP formatea una cadena para que el primer carácter de cada palabra contenida en la cadena pasada por parámetro sea
mayúscula y el resto sean minusculas. La sintaxis es la siguiente:
INITCAP(CADENA)
CADENA es la cadena enviada como parametro. El primer carácter de cada una de las palabras contenidas en la cadena sera convertido a mayuscula y el resto
de las caracteres de cada una de las palabras sera convertido a minuscula.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT INITCAP(‘Wachet auf, ruft uns die Stimme’) FROM DUAL; –Devuelve “Wachet Auf, Ruft Uns Die Stimme”
 SELECT INITCAP (‘RIDE OF THE VALKYRIES’) FROM DUAL; –Devuelve “Ride Of The Valkyries”
Regresar al indice de funciones
FUNCION INSTR
En Oracle y PL/SQL, la función INSTR devuelve la posición inicial de una subcadena o carácter contenido dentro de una cadena. La sintaxis es la siguiente:
INSTR(CADENA, SUBCADENA, POSICION_INICIAL, NUMERO_APARICION)
CADENA es la cadena donde se buscara la subcadena.
SUBCADENA es la subcadena a buscar en CADENA.
POSICION_INICIAL es la posicion inicial en CADENA,  a partir de la cual se comenzara a buscar la SUBCADENA. Si este parametro es omitido la busqueda
comenzara a partir de la posicion 1 de la cadena y hasta el final de la misma. La primera posicion de una cadena es 1. Si la POSICION_INICIAL  es un valor
negativo la funcion contara hacia atrás a partir del ultimo carácter de la cadena las n posiciones negativas indicadas en POSICION_INICIAL y a partit de ahí
iniciara la busqueda del la subcadena.
NUMERO_APARICION es la enesima aparicion de SUBCADENA. Este parametro es opcional y si es omitido por defecto devuelve la posicion de la primera
ocurrencia de la SUBCADENA, encontrada en CADENA.
NOTA:
Si SUBCADENA no es encontrada en CADENA la es la funcion devolvera 0 (Cero).
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT INSTR(‘Tech on the net’, ‘e’) FROM DUAL;             –Devolvera 2; La primera ocurrencia de ‘e’
 SELECT INSTR(‘Tech on the net’, ‘e’, 1, 1) FROM DUAL;       –Devolvera 2; La primera ocurrencia de ‘e’
 SELECT INSTR(‘Tech on the net’, ‘e’, 1, 2) FROM DUAL;       –Devolvera 11; La segunda ocurrencia de ‘e’
 SELECT INSTR(‘Tech on the net’, ‘e’, 1, 3) FROM DUAL;       –Devolvera 14; La tercera ocurrencia de ‘e’
 SELECT INSTR(‘Tech on the net’, ‘e’, -3, 2) FROM DUAL;      –Devolvera 2.
Regresar al indice de funciones
FUNCION LENGTH
En Oracle y PL/SQL, la función LENGTH devuelve la longitud de la cadena enviada por parámetro. La sintaxis es la siguiente:
LENGTH(CADENA)
CADENA es la cadena para la cual se desea determinar la longitud. Si CADENA es un valor nulo la funcion devolvera por resultado NULL.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT LENGTH(NULL) FROM DUAL;                 –Devolvera NULL
 SELECT LENGTH(”) FROM DUAL;                   –Devolvera NULL
 SELECT LENGTH(‘Tech on the net’) FROM DUAL;    –Devolvera 15
 SELECT LENGTH(‘Tech on the net ‘) FROM DUAL;   –Devolvera 16
Regresar al indice de funciones
FUNCION LOWER
En Oracle y PL/SQL, la función LOWER convierte todas las letras a minúsculas de la cadena pasada por parámetro. Si en la cadena existen caracteres que no
son letras, ellos no se ven afectados por esta función. La sintaxis es la siguiente:
LOWER(CADENA)
CADENA es la cadena a convertir en minusculas.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT LOWER(‘Wachet auf, ruft uns die Stimme’) FROM DUAL; –Devuelve “wachet auf, ruft uns die stimme”
 SELECT LOWER(‘RIDE OF THE VALKYRIES’) FROM DUAL; –Devuelve “ride of the valkyries”
Regresar al indice de funciones
FUNCION LPAD
En Oracle y PL/SQL, la función LPAD completa una cadena agregando una cadena o carácter especifico a la izquierda hasta completar la longitud deseada(Solo
cuando la cadena pasada por parámetro no es un valor nulo). La sintaxis es la siguiente:
LPAD(CADENA, LONGITUD_REQUERIDA, CADENA_DE_RELLENO)
CADENA es la cadena a cual sera formateada con n caracteres a la izquierda.
LONGITUD_REQUERIDA es la longitud de la cadena a devolver. Si  la LONGITUD_REQUERIDA es mas pequeña que la cadena original, la funcion LPAD
truncara el tamaño de la cadena a el tamaño de la LONGITUD_REQUERIDA .
CADENA_DE_RELLENO  es opcional. Esta es la cadena o carácter con la cual sera rellenada la CADENA. Si este parametro es omitido la funcion LPAD
completara la cadena resultante con espacion en blanco al lado izquierdo.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT LPAD(‘00001’,7) FROM DUAL;       –Devuelve “0000001”
 SELECT LPAD(‘00001’,2) FROM DUAL;       –Devuelve “00”
 SELECT LPAD(‘00001’,8, ‘0’) FROM DUAL; –Devuelve “00000001”
 SELECT LPAD(‘00001’,8, ‘z’) FROM DUAL; –Devuelve “zzz00001”
 SELECT LPAD(‘00001’,5, ‘0’) FROM DUAL; –Devuelve “00001”
Regresar al indice de funciones
FUNCION LTRIM
En Oracle y PL/SQL, la función LTRIM remueve todos los caracteres especificados al lado izquierdo de la cadena. La sintaxis es la siguiente:
LTRIM(CADENA, CADENA_A_REMOVER)
CADENA es la cadena a cual le removeran los caracteres especificados en CADENA_A_REMOVER al lado izquierdo.
CADENA_A_REMOVER es la cadena que sera removida al lado izquierdo de CADENA. Si este parametro es omitido, la funcion LTRIM removera todos los
espacios en blanco al lado izquierdo de CADENA.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT LTRIM(‘   Examen’) FROM DUAL;                 –Devuelve “Examen”
 SELECT LTRIM(‘   Examen’, ‘ ‘) FROM DUAL;             –Devuelve “Examen”
 SELECT LTRIM(‘0000Testing’,’0′) FROM DUAL;            –Devuelve “Testing”
 SELECT LTRIM(‘123123Total’, ‘Total’) FROM DUAL;       –Devuelve “Total”
 SELECT LTRIM(‘123123Total123’, ‘123’) FROM DUAL;      –Devuelve “Total123”
 SELECT LTRIM(‘xyxzyyyTotal’, ‘xyz’) FROM DUAL;        –Devuelve “Total”
 SELECT LTRIM(‘6372Total’, ‘1234567890’) FROM DUAL;    –Devuelve “Total”
Pareciera que la función LTRIM remueve patrones, pero este no es el caso como queda demostrado en el siguiente  ejemplo:

SELECT LTRIM(‘xyxzyyyTotal’, ‘xyz’) FROM DUAL;


Este ejemplo de hecho remueve las ocurrencias individuales de ‘x’, ‘y’ y ‘z’  lo que es opuesto de el patrón ‘xyz’, la función LTRIM puede también ser usada para
remover todos los números principales como queda demostrado en el siguiente ejemplo:

SELECT LTRIM(‘6372Total’, ‘1234567890’) FROM DUAL;


En este ejemplo cada combinación de números de 0 al 9 ha sido listada en el parámetro CADENA_A_REMOVER.  Haciendo esto no importa el orden en que
aparezcan los números en CADENA todos los números serán removidos por la función LTRIM.
Regresar al indice de funciones
FUNCION REPLACE
En Oracle y PL/SQL, la función REPLACE reemplaza una secuencia de caracteres en una cadena con algún otro carácter  o cadena. La sintaxis es la siguiente:
REPLACE(CADENA, CADENA_A_REEMPLAZAR, [CADENA_DE_REEMPLAZO])
CADENA es la cadena de la cual se reemplazaran una secuencia de caracteres con otro secuencia de caractreres.
CADENA_A_REEMPLAZAR  es la cadena la cual sera buscada en CADENA.
CADENA_DE_REEMPLAZO  es opcional. Todas las ocurrencias de CADENA_A_REEMPLAZAR seran reemplazadas con CADENA_DE_REEMPLAZO. Si el
parametro CADENA_DE_REEMPLAZO es omitido la funcion REPLACE simplemente removera todas las ocurrencias
de CADENA_A_REEMPLAZAR encontradas en CADENA y devolvera la cadena resultante.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT REPLACE(‘123123Ejemplo’, ‘123’) FROM DUAL;     –Devuelve “Ejemplo”
 SELECT REPLACE(‘123Ejemplo123’, ‘123’) FROM DUAL;     –Devuelve “Ejemplo”
 SELECT REPLACE(‘222Ejemplo’, ‘2’, ‘3’) FROM DUAL;     –Devuelve “333Ejemplo”
 SELECT REPLACE(‘0000123’, ‘0’) FROM DUAL;             –Devuelve “123”
 SELECT REPLACE(‘0000123’, ‘0’, ‘ ‘) FROM DUAL;        –Devuelve “    123”
Regresar al indice de funciones
FUNCION RPAD
En Oracle y PL/SQL, la función RPAD completa una cadena agregando una cadena o carácter especifico a la derecha hasta completar la longitud deseada (Solo
cuando la cadena pasada por parámetro no es un valor nulo). La sintaxis es la siguiente:
RPAD(CADENA, LONGITUD_REQUERIDA, [CADENA_DE_RELLENO])
CADENA es la cadena a cual sera formateada con n caracteres a la derecha.
LONGITUD_REQUERIDA es la longitud de la cadena a devolver. Si  la LONGITUD_REQUERIDA es mas pequeña que la cadena original, la funcion RPAD
truncara el tamaño de la cadena a el tamaño de la LONGITUD_REQUERIDA .
CADENA_DE_RELLENO  es opcional. Esta es la cadena o carácter con la cual sera rellenada la CADENA. Si este parametro es omitido la funcion RPAD
completara la cadena resultante con espacion en blanco al lado derecho.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT RPAD(‘00001’,7) FROM DUAL;       –Devuelve “0000100”
 SELECT RPAD(‘00001’,2) FROM DUAL;       –Devuelve “00”
 SELECT RPAD(‘00001’,8, ‘0’) FROM DUAL; –Devuelve “00001000”
 SELECT RPAD(‘00001’,8, ‘z’) FROM DUAL; –Devuelve “00001zzz”
 SELECT RPAD(‘00001’,5, ‘0’) FROM DUAL; –Devuelve “00010”
Regresar al indice de funciones
FUNCION RTRIM
En Oracle y PL/SQL, la función RTRIM remueve todos los caracteres especificados al lado derecho de la cadena. La sintaxis es la siguiente:
RTRIM(CADENA, CADENA_A_REMOVER)
CADENA es la cadena a cual le removeran los caracteres especificados en CADENA_A_REMOVER al lado derecho.
CADENA_A_REMOVER es la cadena que sera removida al lado derecho de CADENA. Si este parametro es omitido, la funcion RTRIM removera todos los
espacios en blanco al lado derecho de CADENA.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT RTRIM(‘Examen   ‘) FROM DUAL;                  –Devuelve “Examen”
 SELECT RTRIM(‘Examen   ‘, ‘ ‘) FROM DUAL;             –Devuelve “Examen”
 SELECT RTRIM(‘Testing0000′,’0’) FROM DUAL;            –Devuelve “Testing”
 SELECT RTRIM(‘Total123123’, ‘Total’) FROM DUAL;       –Devuelve “Total”
 SELECT RTRIM(‘123Total123123’, ‘123’) FROM DUAL;      –Devuelve “123Total”
 SELECT RTRIM(‘Totalxyxzyyy’, ‘xyz’) FROM DUAL;        –Devuelve “Total”
 SELECT RTRIM(‘Total6372’, ‘1234567890’) FROM DUAL;    –Devuelve “Total”
Pareciera que la función RTRIM remueve patrones, pero este no es el caso como queda demostrado en el siguiente  ejemplo:
SELECT RTRIM(‘Totalxyxzyyy’, ‘xyz’) FROM DUAL;
Este ejemplo de hecho remueve las ocurrencias individuales de ‘x’, ‘y’ y ‘z’  lo que es opuesto del patrón ‘xyz’, la función RTRIM puede también ser usada para
remover todos los números principales como queda demostrado en el siguiente ejemplo:

SELECT RTRIM(‘Total6372’, ‘1234567890’) FROM DUAL;


En este ejemplo cada combinación de números de 0 al 9 ha sido listada en el parámetro CADENA_A_REMOVER.  Haciendo esto no importa el orden en que
aparezcan los números en CADENA todos los números serán removidos por la función RTRIM.
Regresar al indice de funciones
FUNCION SOUNDEX
En Oracle y PL/SQL, la función SOUNDEX devolverá una representación fonética (La manera en que se escucha) de una cadena. La sintaxis es la siguiente:
SOUNDEX(CADENA)
CADENA es la cadena cuyo valor fonetico sera devuelto.
El algoritmo SOUNDEX trabaja de la siguiente manera:

1. La funcion SOUNDEX devolvera un valor que siempre iniciara con la primera letra de CADENA.
2. La funcion SOUNDEX usara solamente las primeras 5 consonantes para determinar la porcion NUMERICA de el valor a devolver, excepto si la primera
letra de CADENA es una vocal.
3. La funcion SOUNDEX es una funcion no sensitiva. Esto significa que para los casos de caracteres en mayusculas y/o minusculas devolvera el mismo
valor, ejemplo: casa y CASA.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT SOUNDEX(‘TECH ON THE NET’) FROM DUAL;   –Devuelve “T253”
 SELECT SOUNDEX(‘tech on the net’) FROM DUAL;   –Devuelve “T253”
 SELECT SOUNDEX(‘apples’) FROM DUAL;            –Devuelve “A142”
 SELECT SOUNDEX(‘apples are great’) FROM DUAL; –Devuelve “A142”
 SELECT SOUNDEX(‘applus’) FROM DUAL;            –Devuelve “A14”
Regresar al indice de funciones
FUNCION SUBSTR
En Oracle y PL/SQL, la función SUBSTR permite extraer una parte de una cadena o subcadena de una cadena. La sintaxis es la siguiente:
SUBSTR(CADENA, POSICION_INICIAL, [LONGITUD])
CADENA es la cadena fuente pasada por parametro a la funcion.
POSICION_INICIAL es la posicion inicial en la CADENA a partir de la cual iniciara la extraccion de la subcadena. La posicion inicial de CADENA  es 1.
LONGITUD es opcional. Indica el numero de caracteres a extraer. Si este parametro es omitido, la funcion SUBSTR retornara la cantidad de caracteres restantes
de CADENA a partir de la POSICION_INICIAL.
NOTAS:
Si POSICION_INICIAL es 0, la funcion SUBSTR fijara a 1 la POSICION_INICIAL.
Si POSICION_INICIAL es un numero positivo, la funcion SUBSTR empezara a contrar desde el inicio de la cadena y hacia adelante, el numero posicion indicadas
en POSICION_INICIAL
Si POSICION_INICIAL es un numero negativo, la funcion SUBSTR empezara a contar desde el final de la cadena y hacia atrás, el numero de posiciones
indicadas en POSICION_INICIAL
Si LONGITUD es un valor negativo, la funcion SUBSTR devulvera NULL.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT SUBSTR(‘This is a test’,6,2) FROM DUAL; –Devuelve “is”
 SELECT SUBSTR(‘This is a test’,6) FROM DUAL;   –Devuelve “is a test”
 SELECT SUBSTR(‘TechOnTheNet’,1,4) FROM DUAL;   –Devuelve “Tech”
 SELECT SUBSTR(‘TechOnTheNet’,-3,3) FROM DUAL; –Devuelve “Net”
 SELECT SUBSTR(‘TechOnTheNet’,-6,3) FROM DUAL; –Devuelve “The”
 SELECT SUBSTR(‘TechOnTheNet’,-8,2) FROM DUAL; –Devuelve “On”
Regresar al indice de funciones
FUNCION TRANSLATE
En Oracle y PL/SQL, la función TRANSLATE reemplaza una secuencia de caracteres en una cadena con otra sencuencia de carateres. Sin embargo, esta
reemplaza un carácter a la vez. Por ejemplo, reemplaza el primer carácter de CADENA_A_REEMPLAZAR con el primer carácter
de CADENA_DE_REEMPLAZO, luego la función reemplazara el segundo carácter de CADENA_A_REEMPLAZAR con el segundo carácter
de CADENA_DE_REEMPLAZO y así sucesivamente. La sintaxis es la siguiente:
TRANSLATE(CADENA, CADENA_A_REEMPLAZAR, CADENA_DE_REEMPLAZO)
CADENA es la cadena de la cual se reemplazara un conjunto de caracteres definidos por CADENA_A_REEMPLAZAR  por otro conjunto de caracteres definidos
por CADENA_DE_REEMPLAZO.
CADENA_A_REEMPLAZAR  es la cadena la cual sera buscada en CADENA para reemplazar.
CADENA_DE_REEMPLAZO  todos los caracteres contenidos en CADENA_A_REEMPLAZAR seran reemplazados por el carácter correspondiente contenido
en CADENA_DE_REEMPLAZO.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT TRANSLATE(‘1Bach23’, ‘123’, ‘456’) FROM DUAL;       –Devuelve “4Bach56”
 SELECT TRANSLATE (‘222Wagner’, ‘2Ja’, ‘8Go’) FROM DUAL;      –Devuelve ??
Regresar al indice de funciones
FUNCION TRIM
En Oracle y PL/SQL, la función TRIM remueve todos los caracteres especificados al inicio y al final de la cadena. La sintaxis es la siguiente:
TRIM([LEADING | TRAILING | BOTH [CADENA_A_REMOVER]] CADENA)
LEADING remueve los caracteres especificados al inicio de la cadena.

TRAILING remueve los caracteres especificados al final de la cadena.

BOTH remueve los caracteres especificados al ambos lados de la cadena, al inicio y al final.

Si ninguno de estos valores es especificado en la funcion, esta removera por defecto los carateres especificados, a ambos lados de la cadena.

CADENA_A_REMOVER es el caracter que sera removido de CADENA. Si este parametro es omitido, la funcion TRIM removera todos los espacios en blanco al
inicio y final de CADENA.
CADENA es la cadena de la cual se removeran os caracteres especificados.

APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT TRIM(‘   Examen   ‘) FROM DUAL;                       –Devuelve “Examen”
 SELECT TRIM(‘ ‘ FROM ‘   Examen   ‘) FROM DUAL;              –Devuelve “Examen”
 SELECT TRIM(LEADING ‘0’ FROM ‘000Testing’) FROM DUAL;       –Devuelve “Testing”
 SELECT TRIM(TRAILING ‘1’ FROM ‘Testing111’) FROM DUAL;      –Devuelve “Testing”
 SELECT TRIM(BOTH ‘1’ FROM ‘123Testing111’) FROM DUAL;       –Devuelve “23Testing”
Regresar al indice de funciones
FUNCION UPPER
En Oracle y PL/SQL, la función UPPER convierte todas las letras a mayúsculas de la cadena pasada por parámetro. Si en la cadena existen caracteres que no
son letras, ellos no se ven afectados por esta función. La sintaxis es la siguiente:
UPPER(CADENA)
CADENA es la cadena a convertir en mayusculas.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT UPPER(‘Wachet auf, ruft uns die Stimme’) FROM DUAL;    –Devuelve “WACHET AUF, RUFT UNS DIE STIMME”
 SELECT UPPER(‘ride of the valkyries’) FROM DUAL;            –Devuelve “RIDE OF THE VALKYRIES”
Regresar al indice de funciones
FUNCION VSIZE
En Oracle y PL/SQL, la función VSIZE devuelve el numero de bytes contenidos en la representación interna de una expresión. La sintaxis es la siguiente:
VSIZE(EXPRESION)
EXPRESION es la cadena a evaluar.
APLICA PARA:
 Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
 SELECT VSIZE(‘Wachet auf, ruft uns die Stimme’) FROM DUAL;    –Devuelve 31
 SELECT VSIZE (‘RIDE OF THE VALKYRIES’) FROM DUAL;           –Devuelve 21
 SELECT VSIZE (NULL) FROM DUAL;                              –Devuelve <NULL>
 SELECT VSIZE (”) FROM DUAL;                                –Devuelve <NULL>
 SELECT VSIZE (‘ ‘) FROM DUAL;                               –Devuelve “ “ (Espacio vacio)
Regresar al indice de funciones
Adaptacion de texto y ejemplos, la informacion en general es tomada de http://www.techonthenet.com/
TEMA 3
FUNCIONES S.Q.L.
S.Q.L.
Funciones SQL
 Existen dos tipos de funciones:
o Funciones a nivel de fila

o Funciones a nivel de múltiples filas

 Funciones a nivel de fila. Tipos:


o Carácter

o Número

o Fecha

o Conversión

 Funciones a nivel de grupo. Tipos:


o Manipulan grupos de filas y devuelven un resultado por cada uno de ellos.

S.Q.L.
Funciones de Caracteres
 Pueden ser de dos tipos:
o Funciones de conversión

o Funciones de manipulación de caracteres

 De manipulación de caracteres:
o CONCAT
o SUBSTR

o LENGTH

o INSTR

o LPAD Y RPAD

 De conversión:
o LOWER , UPPER e INITCAP

S.Q.L.
Funciones de conversión caracteres
 LOWER: Convierte a minúsculas.
 UPPER: Convierte a mayúsculas.
 INITCAP: Convierte la primera letra de cada palabra en mayúsculas, y el resto en minúscula.
 Atención: Usar una función de conversión dentro de la cláusula WHERE puede ser altamente ineficiente porque si la columna
afectada forma parte de un índice éste lo 
desactiva, provocando un bajo rendimiento.

S.Q.L.
Funciones manipulación caracteres
 CONCAT: Concatena dos valores.
 SUBSTR: Extrae una subcadena.
 LENGTH: Devuelve la longitud de la cadena.
 INSTR: Devuelve la posición de un carácter o subcadena.
 LPAD: Justifica a la derecha la cadena.
 RPAD: Justifica a la izquierda la cadena.

S.Q.L.
Funciones Numéricas
 ROUND (columna | expresión, n)
o Redondea a n posiciones decimales. Si se omite n, no se redondea con decimales. Si n es negativo, los números a la
izquierda del punto decimal se redondean a 
decenas, centenas, ...
 TRUNC (columna | expresión, n)
o Trunca en la enésima posición decimal. Si se omite n, sin lugares decimales. Si n es negativo, los números a la
izquierda del punto decimal se truncan a cero.
 MOD (m, n)
o Devuelve el resto de la división de m por n.

S.Q.L.
Ejemplos de funciones numéricas
 SQL> SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1)
FROM SYS.DUAL;
 Resultado: 45.92   46   50
 SQL> SELECT TRUNC(45.923, 2), TRUNC(45,923), TRUNC(45.923, -1)
FROM SYS.DUAL;
 Resultado: 45.92   45   40
S.Q.L.
Trabajando con fechas
 Oracle almacena fechas en un formato numérico interno de 7 bytes:
o Siglo, año, mes, día, horas, minutos, segundos

 El formato de fecha por defecto es DD-MON-YY


 SYSDATE es una función que devuelve fecha y hora (pseudocolumna del sistema)
 DUAL es una tabla virtual de la bd., que puede ser usada para inspeccionar SYSDATE.

S.Q.L.
Operadores aritméticos de fechas
 Sumar o restar un número a/o de una fecha da por resultado una fecha.
 Restar dos fechas para encontrar la cantidad de días entre esas fechas.
 Sumar horas a una fecha dividiendo la cantidad de horas por 24.

S.Q.L.
Funciones de Fecha (I)
 MONHTS_BETWEEN (fecha1, fecha2)
o Número de meses entre dos fechas. El resultado puede ser positivo o negativo.

 ADD_MONTHS (fecha, n)
o Añade n meses a fecha, según calendario. N debe de ser un número entero y puede ser negativo.

 NEXT_DAY (fecha, ‘caracter’)


o Devuelve la fecha del día especificado (‘carácter’) siguiente a fecha. Carácter puede ser un número representando
un día o una cadena de caracteres, p.ej. ‘FRIDAY’.

S.Q.L.
Funciones de Fecha (II)
 LAST_DAY (fecha)
o Devuelve la fecha del último día del mes que contiene fecha.

 ROUND (fecha [,’fmt’])


o Cuando no se especifica ningún formato, devuelve la fecha del primer día del mes contenido en fecha. Si fmt=YEAR,
encuentra el primer día del año.
 TRUNC (fecha [,’fmt’])
o Devuelve la fecha con la porción del día truncado en la unidad especificada por el modelo de formato fmt. Si se
omite el formato, laf echa se trunca en el día más próximo.

S.Q.L.
Ejemplos funciones de fecha
 MONTS_BETWEEN (‘01-SEP-95’, ‘11-JAN-94’)   19.6774194
 ADD_MONTHS(‘11-JAN-94’, 6)   ‘11-JUL-94’
 NEXT_DAY (‘01-SEP-95’, ‘FRIDAY’)   ‘08-SEP-95’
 LAST_DAY (‘01-SEP-95’)   ‘30-SEP-95’
 ROUND (‘25-JUL-95’, ‘MONTH’)   ‘01-AUG-95’
 ROUND (‘25-JUL-95’, ‘YEAR’)   ‘01-JAN-96’
 TRUNC (‘25-JUL-95’, ‘MONTH’)   ‘01-JUL-95’
 TRUNC (‘25-JUL-95’, ‘YEAR’)   ‘01-JAN-95’

S.Q.L.
Formatos de Fecha (I)
 YYYY / YEAR
o Año completo en número / Año en letras

 MM / MONTH
o Nº del mes con dos dígitos / Nombre completo del mes

 DY / DAY
o Día de la semana en tres letras / Nombre completo del día

 fm (fill mode)
o Elimina los espacios en blanco de relleno o suprime ceros a la izquierda

S.Q.L.
Formatos de Fecha (II)
 Obtención de la hora:
o HH / HH12 / HH24
 Hora del día / Hora (1-12) / Hora (1-24)

o MI / SS / SSSS
 Minutos / Segundos / Segundos después de medianoche
o AM o PM
 Indicador del Meridiano

o Sufijo SP / SPTH o THSP


 Deletreo del número / Deletreo números ordinales

o Se permiten literales

S.Q.L.
Funciones de conversión (I)
 La conversión de tipos de datos puede ser:
 IMPLÍCITA: Realizada automáticamente por Oracle

 EXPLÍCITA: El usuario es quien la realiza

 Conversión Implícita de datos


 De VARCHAR2 o CHAR   a NUMBER

 De VARCHAR2 o CHAR   a DATE

 De NUMBER   a VARCHAR2

 De DATE   a VARCHAR2

o Estas conversiones se realizan por asignaciones, si Oracle 8 puede convertir el tipo de dato del valor utilizado en la
asignación en el tipo de dato que era el objetivo de la asignación.

S.Q.L.
Funciones de conversión (II)
 TO_CHAR (número | fecha [,’fmt’])
o Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato fmt.
 9: Representa un número

 0: Fuerza a que se muestra el cero

 $: Signo de dólar

 L: Usa el signo de moneda local

 .: Imprime el punto decimal

 ;: Imprime el indicador de millar

 Para fechas, los fmt anteriores.

S.Q.L.
Funciones de conversión (III)
 TO_NUMBER (char)
o Convierte una cadena de caracteres con dígitos en un número.

 TO_DATE (char [,’fmt’])


o Convierte una cadena de caracteres representando una fecha en un valor de fecha según el fmt especificado. Si se
omite el fmt, el formato es DD-MON-YY.
 NVL (expr1, expr2)
o Convierte un nulo (expr1) a un valor de tipo fecha, cadena o número (expr2).

S.Q.L.
La Función DECODE
 Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas condicionales.
o Descifra una expresión después de compararla con cada valor de búsqueda. Si la expresión es la misma que la
búsqueda, se devuelve el resultado. Si se omite el 
valor por defecto, se devolverá un valor nulo donde una búsqueda no coincida con ninguno de los valores
resultantes.

S.Q.L.
Uso de DECODE
 SQL> SELECT job, sal,
DECODE (job, ‘ANALYST’, sal*1.1, ‘CLERK’, sal*1.15, ‘MANAGER’, sal*1.20, sal) AS “Nuevo salario”
FROM emp;
 Si job = ‘ANALYST ‘ entonces el salario se incrementa en un 10%
 Si job = ‘CLERK’ entonces se incrementa en un 15%
 Si jog = ‘MANAGER’ entonces se incrementa en un 20%
 Para otro caso, entones no hay incremento de salario

- add_months(f,n): agrega a una fecha, un número de meses. Si el segundo argumento es positivo, se le suma a
la fecha enviada tal cantidad de meses; si es negativo, se le resta a la fecha enviada tal cantidad de meses.
Ejemplo:
select add_months('10/06/2007',5) from dual; --retorna "10/11/07"
select add_months('10/06/2007',-5) from dual; --retorna "10/01/07"
select add_months('30/01/2007',1) from dual;-- retorna "25/02/07" ya que es el
último día de ese mes.

- last_day(f): retorna el ultimo día de mes de la fecha enviada como argumento. Ejemplo:

select last_day('10/02/2007') from dual;-- "28/02/07"


select last_day('10/08/2007') from dual;-- "31/08/07"

- months_between(f1,f2): retorna el numero de meses entre las fechas enviadas como argumento. Ejemplo:

select months_between('19/05/2003','21/06/05') from dual;-- retorna

- next_day(fecha,dia): retorna una fecha correspondiente al primer día especificado en "dia" luego de la fecha
especificada. En el siguiente ejemplo se busca el lunes siguiente a la fecha especificada:

select next_day('10/08/2007','LUNES') from dual;

- current_date: retorna la fecha actual. Ejemplo:

select current_date from dual;

- current_timestamp: retorna la fecha actual

select current_timestamp from dual;

Retorna: 10/08/07 09:59:44,109000000 AMERICA/BUENOS_AIRES

- sysdate: retorna la fecha y hora actuales en el servidor de Oracle.


-systimestamp: retorna fecha y hora actuales.

select systimestamp from dual;

Retorna 10/08/07 10:33:48,984000000 -03:00

- to_date: convierte una cadena a tipo de dato "date". Ejemplo:

select to_date ('05-SEP-2007 10:00 AM','DD-MON-YYYY HH:MI AM') from dual;

Retorna 05/09/07

- to_char: convierte una fecha a cadena de caracteres. Ejemplo:

select to_char('10/10/2007')from dual;

- extract(parte,fecha): retorna la parte (especificada por el primer argumento) de una fecha. Puede extraer el año
(year), mes (month), día (day), hora (hour), minuto (minute), segundo (second), etc. Ejemplo:

select extract(month from sysdate) from dual;

retorna el número mes de la fecha actual.

En Oracle: Los operadores aritméticos "+" (más) y "-" (menos) pueden emplearse con fechas. Por ejemplos:

select sysdate-3:

Retorna 3 días antes de la fecha actual.

select to_date('15/12/2007')-5 from dual;


Retorna 10/12/07

Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo date.

Operaciones con fechas


Aqui algunos ejemplos para adicionar y sustraer días y meses y encontrar la diferencia entre fechas en Oracle. Estos ejemplos toman el resultado
de la tabla "dual. La tabla Dual es una tabla virtual que existe en todas las Bases de datos Oracle. Muchas veces hemos usado la consulta
SELECT sysdate FROM dual; la cual simplemente nos retorna la fecha y hora actual.

Ajustar Dias, Semanas, Horas y minutos

Para adicionar y sustraer días a una fecha, simplemente usamos los signos + o - respectivamente. Algunos ejemplos:
SQL> SELECT sysdate + 7 FROM dual;
SYSDATE+
-------
25/09/06
SQL> SELECT sysdate - 30 FROM dual;
SYSDATE-
--------
19/08/06
SQL> SELECT to_char(sysdate - 14, 'MM/DD/YYYY HH:MI AM') FROM dual;
TO_CHAR(SYSDATE-14,
-------------------
09/04/2006 11:41 AM
En el primer ejemplo, vemos que la consulta retorna la fecha siete días apartir de hoy. La segunda retorna la fecha de hace 30 días. En la tercera,
se ha usado la función de conversión to_char, para ver las horas y minutos. Esto nos muestra que mientras la fecha, ha cambiado, el tiempo no
cambia.
Los ejemplos primero y tercero ademas muestran como el adicionar días, puede ser útil para computar semanas. Si ud desea simplificar el
computo de semanas, podías usar querys de este tipo:
SQL> SELECT sysdate + (7 * 3) FROM dual;
SYSDATE+
--------
09/10/06
Así mismo, para trabajar con horas ud podría usar fracciones de día. La forma más simple para mostrar esto es dividiendo por 24, que es el
numero de horas diarias. Aunque el parentesis no es necesario, permite evidenciar con más claridad la sentencia
Aqui, se muestra la hora actual y luego la hora actual mas dos horas:
SQL> SELECT to_char(sysdate, 'HH:MI AM') FROM dual;
TO_CHAR(
--------
02:00 PM
SQL> SELECT to_char(sysdate + (2/24), 'HH:MI AM') FROM dual;

TO_CHAR(
--------
04:00 PM

Una alternativa a este método es el uso de la función numtodsinterval. El anterioir ejemplo puede ser reescrito de la siguiente manera (la función
numtodsinterval viene incorporada en la BD apartir de oracle 9i):
SQL> SELECT to_char(sysdate + numtodsinterval(2, 'HOUR'), 'HH:MI AM')
FROM dual;
TO_CHAR(
---
02:00 PM
Aquí la función numtodsinterval está haciendo el trabajo de dividir 2/24 horas. Las opciones válidas para esta función son: ‘DAY’, ‘HOUR’,
‘MINUTE’, o ‘SECOND’. Aquí un ejemplo usando ‘MINUTE’. Cuando se trabaja con minutos la función numtodsinterval es mucho más legible.
SQL> SELECT to_char(sysdate + numtodsinterval(45, 'MINUTE'), 'HH:MI AM')FROM dual;
TO_CHAR(
--------
03:19 PM

Ajustar meses y años

Para trabajar con meses y años (cada uno de los cuales puede variar en número de días) Oracle ofrece la función numtoyminterval. Esta trabaja
en forma similar a la función numtodsinterval mencionada antes tomando un numero y una cadena string. Las opciones válidas para esta función
son: ‘YEAR’ or ‘MONTH’.
SQL> SELECT to_char(sysdate + numtoyminterval(5, 'MONTH'), 'MM/DD/YYYY') FROM dual;
TO_CHAR(SY
----------
02/18/2007
SQL> SELECT to_char(sysdate + numtoyminterval(2, 'YEAR'), 'MM/DD/YYYY') FROM dual;
TO_CHAR(SY
----------
09/18/2008

Comparar fechas

Suponga que deseamos comparar algunas fechas y encontrar el numero de días entre ellas. Para ver este resultado en días, simplemente basta
con usar el operador -, de la siguiente manera:
SQL> SELECT TO_DATE('11/04/2006', 'MM/DD/YYYY') - sysdate FROM dual;
TO_DATE('11/04/2006','MM/DD/YYYY')-SYSDATE
------------------------------------------
46,3796528
El resultado es expresado en días, incluyendo horas fraccion de horas. Por supuesto si se desea semanas, se podría dividir el resultado entre 7.
De manera similar, si se desea obtener horas, se debería multiplicar por 24, pero si se desea meses, entonces se podría usar la función
months_between.
SQL> SELECT months_between(sysdate, to_date('01/01/2006', 'MM/DD/YYYY')) FROM dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('01/01/2006','MM/DD/YYYY'))
----------------------------------------------------------
8,56846625

Retornar la mayor y menor fecha dentro de un conjunto

Las funciones greatest y least pueden ser usadas en fechas para retornar la menor o la mayor fecha.
SQL> SELECT greatest(sysdate,sysdate+1, to_date('09/11/2005','MM/DD/YYYY'), to_date('12/25/2005','MM/DD/YYYY'))FROM dual;
GREATEST
--------
19/09/06
SQL> SELECT least(sysdate,sysdate+1,to_date('09/11/2005','MM/DD/YYYY'), to_date('12/25/2005','MM/DD/YYYY'))FROM dual;
LEAST(SY
--------
11/09/05
Cual es el último día de este mes?

La función last_day retorna el último día del mes pasado como parámetro.
SQL> select last_day(sysdate) from dual;
LAST_DAY
--------
30/09/06

Siguiente día de la semana despues de una fecha

La función next_day retorna la fecha de la próxima ocurrencia de un día de la semana(’Monday’, ‘Tuesday’, etc.) después de una fecha dada.
ejemplo: consultar la fecha del próximo domingo:
SQL> select next_day(sysdate,'Domingo') from dual;
NEXT_DAY
--------
24/09/06

TO_DECIMAL , TO_NUMBER , TO_NUMERIC


Converts an input expression to a fixed-point number. For NULL input, the output is NULL.

These functions are synonymous.

See also:
TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC
Syntax
TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

Arguments
Required:

expr

An expression of a numeric, character, or variant type.

Optional:

format

The SQL format model used to parse the input  expr  and return. For more information, see SQL Format
Models.
precision
The maximal number of decimal digits in the resulting number; from 1 to 38. In Snowflake, precision is
not used for determination of the number of bytes needed to store the number and does not have any
effect on efficiency, so the default is the maximum (38).

scale
The number of fractional decimal digits (from 0 to  precision  - 1). 0 indicates no fractional digits (i.e. an
integer number).

Usage Notes
 For NULL input, the result is NULL.
 Fixed-point numbers with different scale are converted by either adding zeros to the right (when
increasing scale) or by reducing the number of fractional digits by rounding. Note that fixed-to-
fixed casts that increase scale may fail.
 Floating-point numbers will be converted if they are within the representable range given the
scale; the conversion between binary and decimal fractional numbers is not precise; loss of
precision or out-of-range errors may result. Infinities and not-a-numbers result in conversion
error.
 Strings are converted as decimal integer or fractional numbers.
 For VARIANT input:
o If the variant contains a fixed-point or a floating point numeric value, an appropriate numeric
conversion will be performed.
o If the variant contains a string, a string conversion will be performed.
o If the variant contains a Boolean value, the result will be 0 or 1 (for false and true,
correspondingly).
o If the variant contains JSON null value, the output will be NULL.
Examples
create or replace table number_conv(expr varchar);

insert into number_conv values ('12.3456'), ('98.76546');

select expr, to_number(expr), to_number(expr, 10, 1), to_number(expr, 10, 8) from number_conv;

+----------+-----------------+------------------------+------------------------+

| EXPR | TO_NUMBER(EXPR) | TO_NUMBER(EXPR, 10, 1) | TO_NUMBER(EXPR, 10, 8) |

|----------+-----------------+------------------------+------------------------|

| 12.3456 | 12 | 12.3 | 12.34560000 |

| 98.76546 | 99 | 98.8 | 98.76546000 |

+----------+-----------------+------------------------+------------------------+

select expr, to_number(expr, 10, 9) from number_conv;


100039 (22003): Numeric value '12.3456' is out of range

select column1,

to_decimal(column1, '99.9') as d0,

to_decimal(column1, '99.9', 9, 5) as d5,

to_decimal(column1, 'TM9', 9, 5) as td5

from values ('1.0'), ('-12.3'), ('0.0'), (' - 0.1 ');

+---------+-----+-----------+-----------+

| COLUMN1 | D0 | D5 | TD5 |

|---------+-----+-----------+-----------|

| 1.0 | 1 | 1.00000 | 1.00000 |

| -12.3 | -12 | -12.30000 | -12.30000 |

| 0.0 | 0 | 0.00000 | 0.00000 |

| - 0.1 | 0 | -0.10000 | -0.10000 |


+---------+-----+-----------+-----------+

Posted by

u/ben_it

3 years ago

[Oracle] The Differences between CAST and TO_CHAR, TO_NUMBER and TO_DATE

There are two common ways to convert data types in Oracle SQL - CAST and TO_* functions. I've been researching Oracle functions lately,
and each of them have their pros and cons.
The CAST function allows you to convert one data type to another, where you specify the output data type. It has quite a range of data
types, and the syntax for this is:
CAST(input AS output_datatype)
To use this function, you specify the input value, as well as the data type of the output. The function will return that value in the data type
you have specified, if it doesn't give you an error.
The TO_ functions are the other method. When I mention TO_, I'm referring to three functions:
 TO_NUMBER (converts to a number)
 TO_DATE (converts to a date)
 TO_CHAR (converts to a varchar2)
With each of these functions, you specify the input value, and an optional format mask to say what format the value is in. The syntax is:
TO_NUMBER( input_value, [format_mask], [nls_parameter] )

TO_DATE(input_value, [ format_mask ], [nls_language ] )

TO_CHAR( input_value, [format_mask], [nls_parameter] )


What about the CONVERT function? Surely that does some kind of conversion, right?
Well, it does, but it actually converts between character sets, not data types, so I've excluded it from this comparison.
So, What's The Difference?
There are a few differences between CAST and TO_ functions:
 CAST is ANSI-compliant, which means it is SQL standard and works across other database platforms (such as MySQL and
Microsoft SQL). TO_ functions are Oracle-specific.
 CAST works on a wider range of data types. TO_ functions only work on a few data types. There are quite a few other TO_
functions in Oracle that deal with intervals and timestamps but CAST is still more versatile.
 TO_ functions are arguable easier to read than CAST functions, but this is personal preference.
Examples
Let's see some examples of these functions.
Converting a value to a number can be done with either CAST or TO_NUMBER:
SELECT TO_NUMBER('29801') FROM DUAL;
SELECT CAST('29801' AS NUMBER) FROM DUAL;
Converting a number to a character value can be done with either CAST or TO_CHAR:
SELECT TO_CHAR(129) FROM DUAL;
SELECT CAST(129 AS VARCHAR2) FROM DUAL;
Converting a date as a text value into a date value can be done with either CAST or TO_DATE:
SELECT TO_DATE('01-JAN-2000') FROM DUAL;
SELECT CAST('01-JAN-2000') FROM DUAL;
More Information
If you want more information, you can read the guides I've put together on the Oracle functions such as TO_NUMBER, TO_DATE, TO_CHAR,
and CAST.

Das könnte Ihnen auch gefallen