Beruflich Dokumente
Kultur Dokumente
Las funciones de cadena realizan diversas manipulaciones de caracteres. Actúan en las cadenas de caracteres.
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
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
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
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
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
APLICA PARA:
Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
EJEMPLOS:
Valo
r Explicación
8 Notación octal
10 Notación decimal
16 Notación hexadecimal
17 Solo 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:
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.
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 Número
o Fecha
o Conversión
S.Q.L.
Funciones de Caracteres
Pueden ser de dos tipos:
o Funciones de conversión
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
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.
S.Q.L.
Funciones de Fecha (II)
LAST_DAY (fecha)
o Devuelve la fecha del último día del mes que contiene fecha.
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 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
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
$: Signo de dólar
S.Q.L.
Funciones de conversión (III)
TO_NUMBER (char)
o Convierte una cadena de caracteres con dígitos en un número.
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:
- months_between(f1,f2): retorna el numero de meses entre las fechas enviadas como argumento. Ejemplo:
- 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:
Retorna 05/09/07
- 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:
En Oracle: Los operadores aritméticos "+" (más) y "-" (menos) pueden emplearse con fechas. Por ejemplos:
select sysdate-3:
Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo date.
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
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
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
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
See also:
TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC
Syntax
TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Arguments
Required:
expr
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);
select expr, to_number(expr), to_number(expr, 10, 1), to_number(expr, 10, 8) from number_conv;
+----------+-----------------+------------------------+------------------------+
|----------+-----------------+------------------------+------------------------|
+----------+-----------------+------------------------+------------------------+
select column1,
+---------+-----+-----------+-----------+
| COLUMN1 | D0 | D5 | TD5 |
|---------+-----+-----------+-----------|
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] )