Eu tenho a seguinte tabela A:
id
----
1
2
12
123
1234
Preciso preencher com o botão esquerdo os id
valores com zero:
id
----
0001
0002
0012
0123
1234
Como posso conseguir isso?
Eu acredito que pode ser isso que você está procurando:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
ou
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Não testei a sintaxe do segundo exemplo. Não tenho certeza se isso funciona 100% - pode exigir alguns ajustes - mas transmite a ideia geral de como obter a saída desejada.
EDITAR
Para abordar as preocupações listadas nos comentários ...
@ pkr298 - Sim, STR só funciona com números ... O campo do OP é um ID ... portanto, apenas número.
@Desolator - Claro que não vai funcionar ... o primeiro parâmetro tem 6 caracteres. Você pode fazer algo como:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
isso deveria, teoricamente, mover os postes da baliza ... conforme o número aumenta, ele SEMPRE deve funcionar .... independentemente se for 1 ou 123456789 ...
Portanto, se seu valor máximo for 123456 ... você verá 0000123456 e se seu valor mínimo for 1, você verá 0000000001
STR(123456, 4)
, retornará****
O SQL Server agora oferece suporte à função FORMAT a partir da versão 2012, portanto:
vai fazer o truque.
Se sua id ou coluna estiver em a
varchar
e representar um número que você converte primeiro:fonte
Resultado
fonte
Postagem antiga, mas talvez isso ajude alguém:
Para concluir até que termine com 4 caracteres não em branco:
Para completar até 10:
Caso a coluna seja numérica , converta-a primeiro em varchar com o seguinte código:
E para completar até 10 com um campo numérico:
fonte
Experimente isto:
fonte
- Por favor, olhe para estes.
- Espero que isso te ajude
fonte
Isso funciona para strings, inteiros e numéricos:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Onde
4
está o comprimento desejado. Funciona para números com mais de 4 dígitos, retorna uma string vazia noNULL
valor.fonte
Se alguém ainda estiver interessado, encontrei este artigo em DATABASE.GUIDE:
Preenchimento esquerdo no SQL Server - 3 LPAD () equivalentes
Resumindo, existem 3 métodos mencionados nesse artigo.
Digamos que seu id = 12 e você precise que ele seja exibido como 0012.
Método 1 - Use a função RIGHT ()
O primeiro método usa a função RIGHT () para retornar apenas a parte mais à direita da string, após adicionar alguns zeros à esquerda.
SELECT RIGHT('00' + '12', 4);
Resultado:
0012
Método 2 - Use uma combinação de RIGHT () e REPLICATE ()
Este método é quase o mesmo que o método anterior, com a única diferença que eu simplesmente substituo os três zeros pela função REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Resultado:
0012
Método 3 - Use uma combinação de REPLACE () e STR ()
Este método vem de um ângulo completamente diferente dos métodos anteriores:
SELECT REPLACE(STR('12', 4),' ','0');
Resultado:
0012
Confira o artigo, há uma análise mais aprofundada com exemplos.
fonte
É o que normalmente uso quando preciso preencher um valor.
fonte
Eu precisava disso em uma função no servidor SQL e ajustei um pouco a resposta de Patrick.
fonte
Criar Função:
Exemplo:
fonte
SELECT @var = LTRIM(RTRIM(@Text))
Eu criei uma função:
Use: selecione dbo.fnPadLeft (123, 10)
Retorna: 0000000123
fonte
Algo bastante compatível com ODBC, se necessário, pode ser o seguinte:
Isso se baseia no fato de que a quantidade de dígitos para um número de base 10 pode ser encontrada pelo componente integral de seu log. Disto podemos subtraí-lo da largura de preenchimento desejada. A repetição retornará
null
para valores abaixo de 1, então precisamosifnull
.fonte
Minha solução não é eficiente, mas me ajudou em situações em que os valores (números de cheque bancário e número de referência de transferência eletrônica) foram armazenados como varchar onde algumas entradas tinham valores alfanuméricos com eles e eu tive que preencher se o comprimento for menor que 6 caracteres.
Pensei em compartilhar se alguém se deparasse com a mesma situação
fonte
Um exemplo simples seria
fonte
Criei uma função para fazer isso, onde você pode especificar o comprimento de caractere de saída desejado:
Resultados de exemplo
fonte
A maneira mais eficiente é:
fonte