miércoles, 7 de noviembre de 2007

Cálculo de letras del DNI mediante T-SQL

IMPORTANTE: Este blog ha sido migrado a https://enriquecatala.com
Subscríbete a mi canal!



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!