Preenchendo com zeros a esquerda de um valor com Firebird

Olá, estes dias um novo cliente, precisava cadastrar seus produtos e me falou que nem todos tinham código de barras, então eu falei a ele, deixa eu branco que eu gero depois de forma automatizada. Até ai tudo simples, contudo alguns produtos tinham os referidos códigos e orientei que fossem inseridos no programa via leitor.
Após a finalização da etapa destes cadastros o cliente queria imprimir etiquetas para seus produtos sem código. Bom, nada de mais, vamos lá.
Primeiro tive a brilhante ideia de gerar valores simples baseado no código de chave primaria da tabela de produtos, claro que somente estes valores não seriam muito legais por serem poucos algarismos nos registros iniciais, então pensei em pegar o ano corrente e o código de chave primaria para compor o código de barras. 
No entanto ainda era necessário preencher com zeros a esquerda do valor do código de barras pois o leitor ia retornar um algarismos com 13 caracteres devido o padrão utilizado ser EAM13. Então utilizei a seguinte string SQL para formatar o valor conforme desejado.

update produto set codigobarras = lpad(extract(year from current_date) || produtos.codigo, 13, '0') 
where char_length(produto.codigobarras) < 13

Duas coisas pode-se notar na string acima, o uso da função lpad que serve pra formatar valores, tendo seus parâmetros sendo o primeiro o inteiro a ser formatado, o tamanho do campo já formatado e o caracteres que será utilizado na formatação. O outro ponto de destaque é a utilização do extract para obtermos o valor do ano corrente sendo concatenado com o código da chave primaria da tabela.

Como resultado temos os códigos da tabela no campo código de barras no seguinte formato:

0000002017223
0000002017224
0000002017225

Ah, mas será que existe um formato padrão para termos os campos com código de barras válido?, talvez, mas o que vale aqui é a intensão de gerar valores para o campos código de barras.

Simples, não?


Comentários

Postagens mais visitadas deste blog

AWS para Desenvolvedores - Dominando S3 com Delphi

Selecionando apenas o ultimo registro inserido com SQLite