From: | José Luis Tallón <jltallon(at)adv-solutions(dot)net> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Cc: | jmauriciopb(at)yahoo(dot)es |
Subject: | Re: Calculo de dígito verificador EAN13 mediante sql |
Date: | 2016-02-12 14:01:13 |
Message-ID: | 56BDE5A9.6060905@adv-solutions.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 02/12/2016 02:54 PM, mauricio pullabuestan wrote:
> Buen día.
>
> Tengo el siguiente sql para calcular el dígito verificador de EAN13.
Has mirado la documentación de la extensión ISN?
En cualquier caso, yo lo implementaría a golpe de PL/PgSQL, no en SQL
puro con CTEs....
>
> With t
> AS
> (
> Select s.numero::INTEGER, ROW_NUMBER() OVER () rwn
> From
> (
> Select
> regexp_split_to_table('7861091605917', E'[^0-9]*') as numero
> ) s
> ), v
> AS
> (
> Select sum(t.numero * CASE WHEN mod(rwn, 2) = 0 THEN 3 ELSE 1 END) As
> total
> From t
> Where rwn <= 12
> )
> SELECT CASE WHEN mod(v.total, 10) = 0 Then 0 ELSE 10 - Mod(v.total,
> 10) END AS digito_verificador
> From v;
>
> Mi duda es si la función regexp_split_to_table va a respetar el orden
> de string para que row_number() lo numere y no tener problemas en el
> calculo, que depende de la posición de cada dígito.
>
> Estoy por crear una función con este código, la cual va a ser llamada
> esporádicamente.
Razón de más para hacerlo en PL/PgSQL.
HTH,
/ Jose
From | Date | Subject | |
---|---|---|---|
Next Message | Federico Pascual | 2016-02-12 16:27:02 | Permisos por default para un "Rol de Grupo". |
Previous Message | mauricio pullabuestan | 2016-02-12 13:54:21 | Calculo de dígito verificador EAN13 mediante sql |