SQL Identité avec les principaux collier de zéros
J'ai marqué une colonne d'Identité dans ma table
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
J'ai besoin de la colonne d'identité pour être incrémenté comme 001,002,003
, etc.
La base de données montre qu'il est l'insertion comme 1,2,3
, etc.
Comment cela peut-il être fait?
Pourquoi avait-il voté contre? La question était claire et responsable.
Ha Ha!
Je sais que vous avez probablement ne se soucient pas, mais je m'excuse pour mon commentaire précédent et je suis de les supprimer (à l'exception du premier avant je me suis senti frustré). J'étais hors de la ligne, et je suis désolé.
Cela a été répondu ici sur stackoverflow: stackoverflow.com/questions/611340/...
il ne fonctionne que jusqu'à 999, après cela, si vous avez 1000 en nombre alors il en résulte 000 et 1001 conduit à 001
Ha Ha!
Je sais que vous avez probablement ne se soucient pas, mais je m'excuse pour mon commentaire précédent et je suis de les supprimer (à l'exception du premier avant je me suis senti frustré). J'étais hors de la ligne, et je suis désolé.
Cela a été répondu ici sur stackoverflow: stackoverflow.com/questions/611340/...
il ne fonctionne que jusqu'à 999, après cela, si vous avez 1000 en nombre alors il en résulte 000 et 1001 conduit à 001
OriginalL'auteur Innova | 2010-08-07
Vous devez vous connecter pour publier un commentaire.
Si vous voulez afficher votre
number
colonne de zéros, juste pad dans votreSELECT
déclaration. C'est un nombre, il ne sera PAS stocker avec des zéros comme un entier.La
3
est le nombre de caractères que vous voulez dans l'affichage de sortie.merci pour la réponse, mais j'ai besoin de le stocker dans la Base de données dans l'001 format insted de 1,2...
pourquoi faut-il être stocké? Qui est la consommation de ce qui ne peut pas profiter d'un peu de moulage et de mise en forme?
Ne pas vous dire
||
au lieu de+
?OriginalL'auteur p.campbell
Comme d'autres l'ont à juste titre souligné - un INT n'a jamais zéros à gauche - il a de la valeur, c'est tout (et c'est bien comme ça).
Si vous avez besoin de quelques supplémentaires de mise en forme, vous pouvez toujours ajouter une colonne calculée à votre table, quelque chose comme:
De cette façon, votre INT IDENTITÉ sera utilisé comme un INT et qui contient toujours la valeur numérique, alors que
DisplayNumber
contient001, 002, ... 014, 015, .....
et ainsi de suite - magiquement, toujours à jour.Puisque c'est un persisté champ, il fait maintenant partie de votre table, et vous pouvez faire une requête sur elle, et même mettre un index sur elle pour faire des requêtes plus rapides:
Et bien sûr, vous pouvez utiliser seulement à propos de la mise en forme dans la définition de votre colonne calculée, de sorte que vous pourriez aussi ajouter un préfixe ou quelque chose:
Donc dans ce cas, votre
DisplayNumber
seraitABC-001, ABC-002, ...
et ainsi de suite.Vous obtenez le meilleur des deux mondes - vous de garder votre INT IDENTITÉ numérique et automatiquement augmenté de SQL Server, et vous pouvez définir un format d'affichage de la façon que vous voulez et ont à tout moment.
OriginalL'auteur marc_s
Si vous avez besoin à la fois le numéro d'incrémentation automatique (qui ne peut être qu'un numéro) et un caractère alphabétique représentation du nombre, vous pourriez envisager de regarder des colonnes calculées.
Voici quelques liens pour vous:
OriginalL'auteur kbrimington
Pourquoi avez-vous besoin? Comme un entier, 001 est le même que le 1. Si ce que vous voulez, c'est que pour l'affichage ou à d'autres fins, de créer une autre colonne et de faire votre travail là-bas (vous pouvez le faire dans le cadre d'un trigger sur la table, lors de l'insertion, qui ressemble à la nouvelle ligne, et crée l'entrée dans la colonne appropriée.
+1. Cela est très certainement un problème d'affichage, pas un problème de stockage. @Ranjana: le client doit être chargé pour le rembourrage.
Pourquoi voulez-vous stocker? vous pouvez simplement créer une vue sur la table avec la logique de tampon de l'entier de manière appropriée, puis de référence de la vue et à faire.
OriginalL'auteur Noon Silk
j'ai une table où je suis stocker un entier, mais que les utilisateurs veulent voir un XXX, même si elle a des zéros, j'ai donc écrit ce code
OriginalL'auteur DForck42
Voici une autre méthode:
Pas tout à fait autant de duplication des données(?) ajout d'une colonne à la table et pas besoin de spécifier la colonne dans l'instruction select.
OriginalL'auteur Robert Christopher
Bases de données SQL pour stocker des valeurs, pas les littéraux vous avez utilisé pour écrire ces valeurs.
002
est 2. Tout comme1 + 1
est 2. Vous attendez-vous àSELECT 1 + 1
pour afficher la chaîne "1 + 1" au lieu de 2?Si vous voulez les zéros non significatifs pour être stocké dans votre colonne, vous devez utiliser un type de caractère. Mais vous ne pouvez pas utiliser
AUTOINCREMENT
/IDENTITY
.Ce que vous avez probablement vraiment voulez, c'est quelque chose comme
printf("%03d", number)
programme qui lit à partir de la base de données.OriginalL'auteur dan04