Mostrando entradas con la etiqueta comparar cadenas en ascii. Mostrar todas las entradas
Mostrando entradas con la etiqueta comparar cadenas en ascii. Mostrar todas las entradas

martes, 28 de febrero de 2012

Comparar cadenas en SQLServer

Si probamos a filtrar un listado de cadenas entre dos valores (desde, hasta) directamente en SQLServer (campoCadena>='010A' and campoCadena<='0100000') veremos que el resultado no es el esperado. Esto se puede solucionar creandonos la siguiente función:

CREATE FUNCTION [dbo].[compareCP] ( @cp varchar(50), @otroCP varchar(50) ) 

RETURNS int
    BEGIN
        DECLARE @position int;

        SET @position = 1

        IF(LEN(@cp)<LEN(@otroCP))
            RETURN -1
        ELSE IF(LEN(@cp)>LEN(@otroCP))
            RETURN 1
        ELSE BEGIN
            WHILE @position <= LEN(@cp)
            BEGIN   
                IF(ASCII(SUBSTRING(@cp, @position, 1))<ASCII(SUBSTRING(@otroCP, @position, 1)))
                    RETURN -1
                ELSE IF(ASCII(SUBSTRING(@cp, @position, 1))>ASCII(SUBSTRING(@otroCP, @position, 1)))
                    RETURN 1
       
                SET @position = @position + 1
            END
        END
       
        RETURN 0
    END
GO

En el ejemplo anterior damos solución a filtrar un listado de códigos postales (los cuales contienen letras) desde unos valores desde y hasta que introduzca el usuario.

Esta función devolverá 1 en el caso en el que @cp sea mayor que @otroCP, -1 en el caso contrario y 0 si són iguales.

Aquí tenemos el ejemplo de aplicación:

select codigoPostal from codigoPostal where dbo.compareCP(codigoPostal,'VALORDESDE')>=0 and dbo.compareCP(codigoPostal,'VALORHASTA')<=0