J'ai inséré deux enregistrements dans une table.
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Lorsque je les interroge, ils s'affichent tous sous la forme 23
. Cela signifie que SQL Server ignore les 0 en tête. Quel est le mécanisme derrière cela? Comment puis-je demander à SQL Server de renvoyer les valeurs lorsque je les ai insérées (c'est 0023
-à- dire et 23
)?
sql-server
sql-server-2008
user8365
la source
la source
id
doivent être de typeVARCHAR
ou similaire.Réponses:
0023
n'est pas un nombre. C'est une chaîne.23
est le nombre. SQL Server est capable de reconnaître que ces zéros supplémentaires ne sont pas nécessaires pour définir le nombre, il les ignore donc. Si vous souhaitez afficher une valeur de 0023 dans l'application, je vous suggère de faire le formatage côté application. De cette façon, le nombre stocké dans SQL Server est toujours un nombre si vous souhaitez effectuer un ajout, une agrégation ou d'autres calculs. Si vous devez vraiment le stocker sous '0023
', vous devez le convertir en champ de caractères; char, varchar, nvarchar, nchar.la source
id
commeVARCHAR
ou insérez simplement 23 au lieu de 00230023
est une chaîne, stockez-la sous forme de chaîne. Si ce n'est pas le cas, stockez-le comme INT et oubliez les zéros de tête.Cela a déjà été dit dans d'autres réponses, c'est
00023
un chiffre; Je veux juste ajouter que vous pouvez utiliser des colonnes calculées pour afficher ce nombre en utilisant un format personnalisé. Par exemple,la source
0023 est un nombre mais les types de données int et autres nombres ne stockent pas de zéros en tête car il n'y a aucune raison mathématique de le faire.
Si vous devez stocker des zéros non significatifs, utilisez un type de données de type chaîne, char, varchar, etc.
la source
INT
est de longueur fixe (comme 32 bits) et que la notation binaire est utilisée pour les stocker, les zéros de tête sont en effet stockés. Mais ils ne sont pas affichés dans la sortie.15
--Ce ne prend un chiffre en hexadécimal,F
. Ils ont déjà un nombre différent de «zéros de tête». 2147483647 est à 10 chiffres, mais en hexadécimal, c'est seulement 7FFFFFFF ou 8 chiffres.