Eu tenho alguns dados armazenados como um tinyint não assinado. Ao exibi-lo, quero que seja preenchido com zero apenas se tiver 1 dígito de comprimento. Tenho problemas LPAD(CAST(NUMBER AS CHAR CHARSET UTF8),2,'0')
quando tenho números longos de três dígitos. Como consigo o que procuro?
Exemplo de dados na tabela:
NUMBER
1
2
3
...
10
11
...
101
102
O que recebo atualmente ao executar com LPAD
LPAD_NUMBER
01
02
03
...
10
11
...
10
10
O que eu quero
UNKNOWN
01
02
03
...
10
11
...
101
102
SOLUÇÃO QUE USEI
select case
when number between 0 and 9 then
LPAD(CAST(number AS CHAR CHARSET UTF8), 2, '0')
else
CAST(number AS CHAR CHARSET UTF8)
end as newNum;
Isso me dá o que estou procurando e é baseado na resposta aceita .
Você pode usar uma expressão case:
Observe que
||
é o operador padrão sql para concatenação de strings. A menos que configurado corretamente, o MySQL tratará||
comological OR
. Esse comportamento é determinado pela configuraçãoPIPES_AS_CONCAT
. Você também pode ativar esta e outras configurações sãs comANSI
. Você pode ver quais configurações você tem com:Pode ser alterado usando:
ou modificando o arquivo de configuração
No entanto, isso é puramente apresentação, então acho que você deve fazer a formatação do resultado no aplicativo.
Declarando assim:
será preenchido
number
com pelo menos 5 dígitos com zeros à esquerda. Este é o único uso para(5)
.Exemplo:
Mostrando que zeros são exibidos:
Mostrando que um valor muito grande funciona 'certo':