SQL lpad
Em SQL lpad é uma função que preenche o lado esquerdo com um caractere a ser escolhido. A função pode ser utilizada com números e strings. E possui um objetivo de normalizar / padronizar a exibição de um resultado.
A maioria dos SGBD's mais populares do mercado possuem alguma função que faz o papel de um lpad.
SGBD's que não implementam essa função possuem outra forma de fazer essa interpolação de caracteres, como por exemplo utilizando a função format
.
Para ilustrar um caso de uso, temos o seguinte, digamos que queremos exibir um número de protocolo, que possui um número fixo de caracteres, e possui o seguinte formato:
Temos a seguinte tabela, onde o valor numérico a ser exibido é a coluna numero. Segue o DDL:
Desta forma uma maneira de solucionar este problema é utilizar a função lpad ela vai servir para interpolar o a parte exibida com #######
e quando este número possuir menos digitos do que o deve ser exibido deve ser completado com zeros à esquerda.
Não existe uma função padrão da linguagem SQL que resolve este problema, então podemos usufruir dos dialetos SQL que já possuem algumas facilidades para resolver este problema.
Mysql
Utilizando o SGBD mysql, é possível usar a função LPAD
LPAD(str,len,padstr)
Onde a string str
, preenchida à esquerda com a string padstr
até um comprimento de len
caracteres. Se str
for maior que len
, o valor de retorno será reduzido para a quantidade de caracteres len
.
Para mais exemplos, consulte a documentação.
Uma consulte que resolve este problema utilizando o MYSQL é o seguinte:
SELECT concat('xpto-',lpad(a.numero, 7, '000000')) from atendimento a
--output: > xpto-0000001
Postgres
O postgres possui uma função bem parecida com esta, então o SQL que resolve este problema seria:
SELECT CONCAT('xpto-',LPAD(a.numero::VARCHAR, 7, '000000')) from atendimento a
Verifique que aqui foi necessário fazer um cast explícito para string. Pois a função do postgres aceita apeanas string como um valor válido para o primeiro parâmetro.
Caso a gente faça essa chamada sem o cast para VARCHAR haverá o seguinte erro:
ERROR: function lpad(integer, integer, unknown) does not exist
LINE 1: SELECT CONCAT('xpto-',LPAD(a.numero, 7, '000000')) from aten...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Para mais exemplos de uso consulte a documentação.
Oracle
Para utilização do Oracle, a utilização será bem parecida com o comando utilizado no mysql.
Segue um exemplo:
SELECT CONCAT('xpto-',LPAD(a.numero, 7, '000000')) from atendimento a;
Para mais informações acesse a documentação.