Eu inseri dois registros em uma tabela.
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Quando os consulto, todos são exibidos como 23
. Isso significa que o SQL Server ignora os 0s principais. Qual é o mecanismo por trás disso? Como posso fazer com que o SQL Server retorne os valores quando os inseri (ie 0023
e 23
)?
sql-server
sql-server-2008
user8365
fonte
fonte
id
deve ser do tipoVARCHAR
ou similar.Respostas:
0023
não é um número. É uma corda.23
é o número O SQL Server reconhece que esses zeros extras não são necessários para definir o número e, portanto, os ignora. Se você deseja exibir um valor como 0023 para o aplicativo, sugiro fazer a formatação no lado do aplicativo. Dessa forma, o número armazenado no SQL Server ainda é um número se você desejar fazer adição, agregação ou outros cálculos. Se você realmente precisar armazená-lo como '0023
', precisará convertê-lo em um campo de caractere; char, varchar, nvarchar, nchar.fonte
id
comoVARCHAR
ou apenas inserir 23 em vez de 00230023
for uma sequência, armazene-a como uma sequência. Caso contrário, armazene-o como um INT e esqueça os zeros à esquerda.Já foi dito em outras respostas que
00023
é um número; Eu só quero acrescentar que você pode usar colunas computadas para mostrar esse número usando o formato personalizado. Por exemplo,fonte
0023 é um número, mas os tipos de dados int e outros números não armazenam zeros à esquerda, pois não há motivo matemático para fazê-lo.
Se você precisar armazenar os zeros à esquerda, use um tipo de dados como string, char, varchar etc.
fonte
INT
é de comprimento fixo (como 32 bits) e a notação binária é usada para armazená-los, os zeros à esquerda são realmente armazenados. Mas eles não são exibidos na saída.15
- isto leva apenas um dígito em hexadecimalF
,. Eles já têm um número diferente de "zeros à esquerda". 2147483647 tem 10 dígitos, mas em hexadecimal são apenas 7FFFFFFF ou 8 dígitos.