Saltar al contenido

Validar Código postal SQL server

Validar un código postal en SQL Server, puede ser muy simple si con una expresión regular que coincida con el patrón del código postal esperado. Si esposible que si eres un desarrollador de algun lenguaje de programacion como C# o VB.net tengas que tirar algunas lineas de codigo para validar esta entrada. pero con una restricción de sql podras lograr esto en pocos pasos.

Este articulo muestra dos ejemplos de como validar un codigo postal desde una restricción , un trigger o una funcion que te devuelva el resultado esperado.

Índice

    Restricción para validar un codigo postal

    La clausula Check es la mejor aliada para validar entradas de datos para el caso del coódigo postal requerimos usar expressiones que permitan validar la entrada. esto al igual que validar el telefono o una fecha de nacimieto nos permite controlar que la informacion suministrada posea el mismo formato.

    Para validar el código postal utilizamos la función LIKE de SQL Server para comparar el valor del código postal con la expresión regular.

    Por ejemplo codigo postal solo numero:

    CREATE TABLE Clientes (
        IdCliente INT PRIMARY KEY,
        Nombre VARCHAR(50),
        CodigoPostal VARCHAR(10) 
    CONSTRAINT CK_Clientes_CodigoPostal CHECK (CodigoPostal LIKE REPLICATE('[0-9]', 5))
    )
     
    
    • En este caso creamos una tabla llamada Clientes con una columna CodigoPostal que debe contener un código postal válido, podríamos definir la restricción CHECK.
    • En este ejemplo, la restricción CHECK se define como CK_Clientes_CodigoPostal y se aplica a la columna CodigoPostal. La expresión regular REPLICATE(‘[0-9]’,5) se utiliza para validar que el valor del código postal tenga exactamente cinco dígitos.

    Ahora cualquier intento de insertar o actualizar un registro en la tabla Clientes con un valor no válido en la columna CodigoPostal generará un error de restricción. Este error debera ser validado por el desarrollador en el CRUD de su aplicación de su servicio.

    Validacion sql para codigo postal alfanumerico

    Si nuestro código postal permite que haya una letra al inicio, la expresión regular que se utiliza para validar el código postal deberá ser modificada para permitir esta posibilidad. La expresión regular que se utilizó en el ejemplo anterior solo permite que el código postal tenga cinco dígitos, por lo que no permitiría una letra al inicio.

    La expresión que permita una letra al inicio del código postal podría ser:

    ‘[A-Z]’+ replicate(‘[0-9]’,4)

    Esta expresión regular permite que el código postal tenga un máximo de cinco caracteres, y la primera letra (si existe) puede ser cualquier letra mayúscula o minúscula.

    Puedes definir la restricción CHECK de la siguiente manera:

    CREATE TABLE Clientes (
        IdCliente INT PRIMARY KEY,
        Nombre VARCHAR(50),
        CodigoPostal VARCHAR(10) CONSTRAINT CK_Clientes_CodigoPostal CHECK (CodigoPostal LIKE '[A-Z]'+ replicate('[0-9]',4) and len(CodigoPostal)=5)
    )
    

    Con esta restricción, se permitirá que el código postal tenga una letra al inicio (si se proporciona), seguida de cuatro o cinco dígitos. Cualquier intento de insertar o actualizar un registro en la tabla Clientes con un valor no válido en la columna CodigoPostal generará un error de restricción.

    Trigger para validar Codigo postal

    Usar un trigger que se ejecutará automáticamente antes o después de insertar o actualizar un registro en la tabla, lo que te permitirá validar el valor del código postal y, en caso de que sea inválido, revertir la transacción o realizar otra acción.

    Ejemplo de trigger para validar un código postal:

    CREATE TRIGGER TR_ValidarCodigoPostal
    ON Clientes
    AFTER INSERT, UPDATE
    AS
    BEGIN
        IF EXISTS(SELECT 1 FROM inserted WHERE CodigoPostal NOT LIKE '[A-Z]'+ replicate('[0-9]',4) and len(CodigoPostal ) = 5)
        BEGIN
            RAISERROR('El código postal no es válido.', 16, 1)
            ROLLBACK TRANSACTION
        END
    END
    

    En este ejemplo, el trigger TR_ValidarCodigoPostal se define en la tabla Clientes y se ejecuta después de insertar o actualizar un registro en la tabla. Dentro del trigger, se comprueba si hay algún registro en la tabla inserted (que contiene los registros que se están insertando o actualizando) que tenga un valor de CodigoPostal no válido.

    Si se encuentra un valor no válido, se genera un error y se revierte por lo cual te recomiendo conocer el manejo de errores en sql server try catch.

    Funcion para validar zipcode

    En SQL Server no posee una función incorporada para validar un código postal, pero puedes crear una función definida por el usuario para hacer esta validación.

    Aquí te dejo un ejemplo de cómo podrías crear una función para validar un código postal en SQL Server:

    CREATE FUNCTION ValidarCodigoPostal
    (
        @CodigoPostal VARCHAR(10)
    )
    RETURNS BIT
    AS
    BEGIN
        DECLARE @Resultado BIT = 0
    
       
      IF @CodigoPostal LIKE  '[A-Z]'+ replicate('[0-9]',4) and LEN(@CodigoPostal) = 5
            SET @Resultado = 1
    
        RETURN @Resultado
    END
    

    En este ejemplo, la función ValidarCodigoPostal toma un parámetro @CodigoPostal que representa el código postal que se va a validar. Dentro de la función, se comprueba si el valor del código postal cumple con la expresión regular ‘[A-Z]’+ replicate(‘[0-9]’,4), que permite una letra opcional al inicio seguida de cuatro o cinco dígitos. Si el código postal cumple con la expresión regular, se establece el valor de retorno de la función en 1; de lo contrario, el valor de retorno se mantiene en 0.

    Conclusion

    Como hemos visto existen mas de una forma de validar un codigo postal, la desicion de usar un metodo o el otro dependera de la necesidad. para mi el uso de triggers debe ser la ultima opcion. ahora comentanos cual opcion te funciona mejor. las restricciones cuando se utilizan en conjunto con las funciones de de caracteres como substrings pueden ser muy eficaces.

    hasta la proxima gracias :D!!