none
Agregar guiones a un Doumento de Identificaion Personal (DNI) RRS feed

  • Pregunta

  • Como puedo añadirle un guion a un DNI ya ingresado.

    Ejemplo:

    N# de Dni = 022644179

    Lo que quiero hacer es que cuente 8 digitos y entre esos 2 (digito 8 y 9) actualize el antiguo y le coloque un guion algo asi:

    N# de Dni actualizado = 02264417-9


    Kidito C.

    domingo, 3 de noviembre de 2019 3:48

Respuestas

  • Hola Kidito:

    declare @dni varchar(100) = '022644179'
    SELECT SUBSTRING(@DNI,1,8)+'-'+SUBSTRING(@DNI,9,1)
    

    Eso te serviría para resolver un Dni, como en el ejemplo.

    Si quieres ver o cambiar valores de columna de una tabla que tenga dnis, entonces puede ser así:

    /* creo una tabla e inserto datos de ejemplo */
    CREATE TABLE dbo.emp
    (id     INT IDENTITY, 
     nombre VARCHAR(100), 
     dni    VARCHAR(15)
    );
    GO
    Insert into dbo.emp
    (nombre, dni)
    values
    ('a','022644179'),
    ('a','123456789'),
    ('a','234567899'),
    ('a','111111111'),
    ('a','222222234'),
    ('a',null);
    GO
    -- Codigo 1 Obtener datos
    ;WITH T AS (
    	SELECT case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    	else null end as dni
    	FROM dbo.emp e
    	)
    	select * from T

    Si después de comprobarlos, quieres actualizar datos en la tabla.

    -- Codigo 2 Update
    ;WITH T AS (
    	SELECT case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    	else null end as dni, e.id
    	FROM dbo.emp e
    	)
    	update emp set dni = T.dni from emp inner join T on T.id = emp.id
    go
    select * from emp

    Salida

    Los códigos se basan en la utilización de la función substring, que obtiene una parte de una expresión desde una posición de inicio, y con un avance de carácteres.

    Substring

    https://docs.microsoft.com/es-es/sql/t-sql/functions/substring-transact-sql?view=sql-server-ver15

    En las soluciones se utiliza una tabla de expresión común

    Tabla de expresión común

    https://javifer2.wordpress.com/2018/12/18/with-cte-tablas-de-expresion-comun-1/

    • Marcado como respuesta Kidito miércoles, 8 de abril de 2020 23:57
    domingo, 3 de noviembre de 2019 4:38

Todas las respuestas

  • Hola Kidito:

    declare @dni varchar(100) = '022644179'
    SELECT SUBSTRING(@DNI,1,8)+'-'+SUBSTRING(@DNI,9,1)
    

    Eso te serviría para resolver un Dni, como en el ejemplo.

    Si quieres ver o cambiar valores de columna de una tabla que tenga dnis, entonces puede ser así:

    /* creo una tabla e inserto datos de ejemplo */
    CREATE TABLE dbo.emp
    (id     INT IDENTITY, 
     nombre VARCHAR(100), 
     dni    VARCHAR(15)
    );
    GO
    Insert into dbo.emp
    (nombre, dni)
    values
    ('a','022644179'),
    ('a','123456789'),
    ('a','234567899'),
    ('a','111111111'),
    ('a','222222234'),
    ('a',null);
    GO
    -- Codigo 1 Obtener datos
    ;WITH T AS (
    	SELECT case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    	else null end as dni
    	FROM dbo.emp e
    	)
    	select * from T

    Si después de comprobarlos, quieres actualizar datos en la tabla.

    -- Codigo 2 Update
    ;WITH T AS (
    	SELECT case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    	else null end as dni, e.id
    	FROM dbo.emp e
    	)
    	update emp set dni = T.dni from emp inner join T on T.id = emp.id
    go
    select * from emp

    Salida

    Los códigos se basan en la utilización de la función substring, que obtiene una parte de una expresión desde una posición de inicio, y con un avance de carácteres.

    Substring

    https://docs.microsoft.com/es-es/sql/t-sql/functions/substring-transact-sql?view=sql-server-ver15

    En las soluciones se utiliza una tabla de expresión común

    Tabla de expresión común

    https://javifer2.wordpress.com/2018/12/18/with-cte-tablas-de-expresion-comun-1/

    • Marcado como respuesta Kidito miércoles, 8 de abril de 2020 23:57
    domingo, 3 de noviembre de 2019 4:38
  • Javi Fernández F Gracias por la explicación, el tiempo y la ayuda brindada.

    Kidito C.

    domingo, 3 de noviembre de 2019 5:09
  • De nada
    domingo, 3 de noviembre de 2019 9:02
  • En caso de que quiera ponerlo en un trigger como seria... lo intente pero me coloca 2 guiones

    Codigo del trigger:

    Create trigger Guion_Dni
    on Empleado
    after insert
    as
    Begin


    ;WITH T AS (
    SELECT
    case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    else null
    end as dni, e.id
    FROM Empleado e
    )
    update Empleado set dni = T.dni from Empleado inner join T on T.id = Empleado.id
    End

    Imagen:

    


    Kidito C.

    domingo, 3 de noviembre de 2019 18:22
  • Hola Kidito:

    Casi lo tenías, pero no es del todo correcto.

    CREATE TABLE dbo.empleado
    (id     INT IDENTITY, 
     nombre VARCHAR(100), 
     dni    VARCHAR(15)
    );
    GO
    Create trigger Guion_Dni
    on Empleado
    after insert
    as
    Begin
    
    ;WITH T AS (
    	SELECT
    		case when e.dni is not null then  SUBSTRING(e.dni,1,8)+'-'+SUBSTRING(e.dni,9,1)
    		else null
    		end as dni, e.id
    	FROM inserted e
    )
    update Empleado set dni = T.dni from Empleado inner join T on T.id = Empleado.id
    End
    go

    Cuando ocurre el evento de insertar, quien tiene la información insertada es la pseudo tabla inserted.

    Si observas el mismo, FROM inserted e no from empleado.

    Insert into dbo.empleado
    (nombre, dni)
    values
    ('a','022644179'),
    ('a','123456789'),
    ('a','234567899'),
    ('a','111111111'),
    ('a','222222234'),
    ('a',null);
    GO
    select * from empleado

    Espero te ayude.

    domingo, 3 de noviembre de 2019 20:07