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