martes, 28 de diciembre de 2010

Extraer una parte de un String en SQL

Para extraer una parte de una cadena de caracteres o String en SQL tenemos la función

SUBSTRING('micadena', 3, 6)

Devuelve parte de 'micadena' desde el caracter 3 avanzando 6 caracteres
Entonces devuelve 'cadena'
También se le puede pasar una variable como parámetro

Ejemplo en Postgres 9.0

CREATE OR REPLACE FUNCTION extraercadena() RETURNS VARCHAR(10) AS $$
DECLARE
    cadena VARCHAR(10);
    subcadena CARCHAR(4);
BEGIN
    cadena = 'otracadena';
    subcadena = SUBSTRING(cadena, 1, 4);
    RETURN subcadena;
END
$$ LANGUAGE PLPGSQL

para probarlo:

SELECT extraercadena()

Si queremos extraer una parte de la cadena o string hasta un caracter determinado o a partir de algún carácter determinado, por ejemplo

extraer lo que esta antes o después del @ en una dirección de correo electrónico

cadena = 'ejemplodecorreo@sqlmail.com';
posicion_char = POSITION('@' IN cadena); 
--retorna la posicion del @ dentro de la variable cadena
posicion_fin = LENGTH(cadena); --retorna el largo de la cadena
cadena_antes = SUBSTRING(cadena, 1, posicion_char - 1); 
cadena_despues = SUBSTRING(cadena, posicion_char + 1, posicion_fin);

cadena_antes almacena lo que está antes del @
cadena_despues almecena lo que esta despues del @

La función POSITION(substring IN string) retorna la posicion de substring dentro de string
Ejemplo POSITION('om' IN 'Thomas') retorna 3
Es el quivalente a CHARINDEX(substring, string) de MySql.