miércoles, 7 de noviembre de 2007

Cálculo de letras del DNI mediante T-SQL

Me he visto en la necesidad de obtener la letra del DNI de un conjunto grandísimo de números de DNI.

Por optimización, el DNI se almacenó en un tipo de datos INT ( sin letra ) y se puso como clave primaria, pero por cosas de la vida, he tenido que lanzar un proceso que recalcule las letras de todos los DNI, para algo que no viene al caso

Aquí va la solución:



use GUSENET

go

create table dbo.Nifs(numnif int primary key);

go

insert into dbo.Nifs(numnif) values(12569875)

go

select * from nifs


-- CALCULO DE LA LETRA

DECLARE @letras_nif as CHAR(23)

set @letras_nif = 'TRWAGMYFPDXBNJZSQVHLCKE'

;

WITH SubSelect AS(
SELECT numnif,

CONVERT(INT,

  FLOOR(

     FLOOR(

           (

            (

             CONVERT(FLOAT,numnif)/23)-FLOOR(CONVERT(FLOAT,numnif)/23)

          )*100

    )*0.23+0.5

 )+1

)AS pos_letra

FROM dbo.Nifs

)

SELECT SUBSTRING(@letras_nif, pos_letra ,1) AS letra,

       str(numnif)+'-'+SUBSTRING(@letras_nif, pos_letra ,1)

FROM subselect


Salu2!

Publicar un comentario