Re: ayuda!

From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: antonio albiñana crespo <an_chonio(at)hotmail(dot)com>
Cc: "Lista Ayuda Pgsql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ayuda!
Date: 2006-04-25 05:56:45
Message-ID: c2d9e70e0604242256h18ceb374p41a382210079dc0c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

con copia a la lista

On 4/24/06, antonio albiñana crespo <an_chonio(at)hotmail(dot)com> wrote:
>
> Buenas, contestase mi mail en el foro de postgre.
>
> Te explico, el DNI es el documento de identidad nacional en españa. Se
> compone de un numero de 8 cifras, un guion "-" y una letra mayuscula.
>
> Una manera de ver que un dni es correcto es hacer el modulo 23 del numero y
> ver en una tabla si la letra es la misma que tiene asociada el dni.
>
>
>
>
> Resto 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
>
> Letra T R W A G M Y F P D X B N J Z S Q V H L C K E
>
> La pega que tengo, es que no se en que tipo de estructura de datos almacenar
> el DNI, puesto que se compone de un numero y una letra.
>
> Tengo el codigo hecho para un NUMERIC, y lo hace bien, pero la letra no la
> puedo almacenar.
>
> Te lo adjunto:
> -- Function: funcion_valida_dni()
> -- DROP FUNCTION funcion_valida_dni();
> CREATE OR REPLACE FUNCTION funcion_valida_dni()
> RETURNS "trigger" AS
> $BODY$
> DECLARE
> aux CHAR;
> numero INTEGER;
> BEGIN
> numero = NEW.dni % 23;
>
> RAISE NOTICE 'dni: %',NEW.dni;
> RAISE NOTICE 'resto: %',numero;
> IF NEW.dni ISNULL THEN RAISE EXCEPTION 'DNI no puede ser nulo'; END IF;
> SELECT letra INTO aux FROM validacion_dni WHERE validacion_dni.resto =
> numero;
>
> RAISE NOTICE 'aux: %',aux;
> IF (aux = NEW.dni) THEN
> RAISE NOTICE 'DNI correcto!';
> ELSE RAISE EXCEPTION 'DNI no valido';
> END IF;
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
> ALTER FUNCTION funcion_valida_dni() OWNER TO postgres;
> Donde validacion_dni es el nombre de la tabla de arriba, compuesta de dos
> atributos, letra y resto.
>
> Entonces me haria falta una estructura, que supongo que seria una cadena de
> texto, con la que almacenar el numero y la letra, no solo el numero como
> hago yo. Me hacen falta funciones para operar con cadenas, y sacar el numero
> de la cadena y la letra. Me dijiste que con str...( from 1 to 8) sacaba un
> caracter, pero tengo que sacar el numero entero y no se como se hace.
>
> Espero haberme explicado gracias
>
>
>
>
>
>
>
>
>
>
>
> ________________________________
> Busca a la vez en Internet, en directorios, en enciclopedias... Atrévete con
> el nuevo MSN Search

--
Atentamente,
Jaime Casanova

"What they (MySQL) lose in usability, they gain back in benchmarks, and that's
all that matters: getting the wrong answer really fast."
Randal L. Schwartz

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message antonio albiñana crespo 2006-04-25 06:07:09 acceso
Previous Message Jaime Casanova 2006-04-25 04:39:45 Re: Autovaccum