Listado completo de tutoriales
21 - Funciones para el manejo de cadenas |
PostgreSQL tiene funciones para trabajar con cadenas de caracteres. Estas son algunas:
char_length(string): Retorna la longitud del texto. Ejemplo:
select char_length('Hola');
retorna un 4.
upper(string): Retorna el texto convertido a mayúsculas. Ejemplo:
select upper('Hola');
retorna 'HOLA'.
lower(string): Retorna el texto convertido a minúsculas. Ejemplo:
select lower('Hola');
retorna 'hola'.
position(string in string): Retorna la posición de un string dentro de otro. Si no está contenido retorna un 0. Ejemplo:
select position('Mundo' in 'Hola Mundo');
retorna 6.
select position('MUNDO' in 'Hola Mundo');
retorna 0 (ya que no coinciden mayúsculas y minúsculas)
substring(string [from int] [for int]): Retorna un substring, le indicamos la posición inicial y la cantidad de caracteres a extraer desde dicha posición. Ejemplo:
select substring('Hola Mundo' from 1 for 2);
retorna 'Ho'.
select substring('Hola Mundo' from 6 for 5);
retorna 'Mundo'.
trim([leading|trailing|both] [string] from string): Elimina caracteres del principio o o final de un string. Por defecto elimina los espacios en blanco si no indicamos el caracter o string. Ejemplo:
select char_length(trim(' Hola Mundo '));
retorna un 10. Esto es debido a que primero se ejecuta la función trim que elimina los dos espacios iniciales y los dos finales.
select char_length(trim(leading ' ' from ' Hola Mundo '));
retorna un 12. Esto es debido a indicamos que elimine los espacios en blanco de la cadena solo del comienzo (leading).
select trim(trailing '-' from '--Hola Mundo----');
retorna '--Hola Mundo'. Esto es debido a indicamos que elimine los guiones del final del stirng.
ltrim(string,string): Elimina los caracteres de la izquierda según el dato del segundo parámetro de la función. Ejemplo:
select char_length(ltrim(' Hola'));
retorna un 4.
select ltrim('---Hola','-');
retorna 'Hola'.
rtrim(string,string): Elimina los caracteres de la derecha según el dato del segundo parámetro de la función. Ejemplo:
select char_length(rtrim('Hola '));
retorna un 4.
select rtrim('Hola----','-');
retorna un 'Hola'.
substr(text,int[,int]): Retorna una subcadena a partir de la posición que le indicamos en el segundo parámetro hasta la posición indicada en el tercer parámetro. Ejemplo:
select substr('Hola Mundo',2,4);
retorna 'ola'.
select substr('Hola Mundo',2);
retorna 'ola Mundo' (si no indicamos el tercer parámetro retorna todo el string hasta el final)
lpad(text,int,text): Rellena de caracteres por la izquierda. El tamaño total de campo es indicado por el segundo parámetro y el texto a insertar se indica en el tercero. Ejemplo:
select lpad('Hola Mundo',20,'-');
retorna '----------Hola Mundo'.
rpad(text,int,text): Rellena de caracteres por la derecha. El tamaño total de campo es indicado por el segundo parámetro y el texto a insertar se indica en el tercero. Ejemplo:
select rpad('Hola Mundo',20,'-');
retorna 'Hola Mundo----------'.
select rpad('Hola Mundo',20,'-*');
retorna 'Hola Mundo-*-*-*-*-*'.
drop table if exists libros; create table libros( codigo serial, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), cantidad smallint default 0, primary key (codigo) ); insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',25); insert into libros (titulo,autor,editorial,precio,cantidad) values('Java en 10 minutos','Mario Molina','Siglo XXI',50.40,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',15,50); -- Mostramos sólo los 12 primeros caracteres de los títulos de los libros y -- sus autores, empleando la función "substring()": select substring(titulo,1,12) as titulo from libros; -- Mostramos los títulos, autores y editoriales de todos libros, -- al último campo lo queremos en mayúsculas: select titulo, autor, upper(editorial) from libros; -- Mostrar todos los títulos de los libros rellenando con el -- caracter '-' a la derecha. select rpad(titulo,40,'-') from libros; -- Imprimimos todo los libros que contienen la cadena 'en' en alguna -- parte del título del libro. select * from libros where position('en' in titulo)>0; -- Imprimimos todos los libros que tienen un título con 10 o más caracteres: select * from libros where char_length(titulo)>=10;
La ejecución de este lote de comandos SQL genera una salida similar a: