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.