SQL - type de données Numériques avec des zéros
J'ai besoin de stocker Medicare APC codes. je crois que le format nécessite 4 numéros. Les zéros non significatifs sont pertinentes. Est-il possible de stocker ce type de données, avec la vérification? Comment dois-je stocker ces données (varchar(4), int)?
OriginalL'auteur P.Brian.Mackey | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
en option, vous pouvez toujours ajouter une contrainte de vérification pour s'assurer que les données numériques avec des zéros. Cet exemple permettra de lancer des exceptions dans Oracle. En d'autres SGBDR, vous pouvez utiliser une expression régulière vérifie:
bon point. Il ne retourne pas false. Il soulève une exception. Au moins dans Oracle
Merci, ça a du sens. La programmation sera un peu différent entre l'interception d'une exception et la détection d'une base de données erreur de contrainte. J'ai tendance à rechercher la contrainte des erreurs, mais votre suggestion est d'un joli approche de trop..
Eh bien, il peut ne pas vraiment d'importance, parce que la contrainte check lève une erreur si le test renvoie la valeur false.
OriginalL'auteur Lukas Eder
Ce genre de problème, le stockage zéro principaux numéros qui doivent être considérés comme des valeurs Numériques sur certains scénarios (c'est à dire de tri) et que textuelle des valeurs dans d'autres (par exemple les adresses) est toujours une douleur, et il n'y a pas une seule réponse qui est la meilleure pour tous les utilisateurs. Dans mon entreprise nous avons une base de données qui stocke des nombres sous forme de texte pour les codes (pas de Medicare APC codes) et nous devons pad avec zéro est si ils vont trier correctement lorsqu'il est utilisé dans une opération de l'ordre.
Ne pas utiliser un type de données numérique pour cela, car l'élément n'est pas un vrai numéro, mais des données textuelles qui utilise des caractères numériques. Vous ne serez pas effectuer de calculs ou d'agrégats sur les codes et donc le seul avantage de les stocker, car un certain nombre serait d'assurer le bon tri des codes et qui peut être fait avec le code stockés en tant que texte par remplissage par des zéros si nécessaire. Si vous sue un type de données numérique puis tout temps le code est combiné avec d'autres valeurs textuelles, vous devrez explicitement le convertir en CHAR/VARCHAR ou permettent à SQL Server de le faire depuis des conversions implicites devraient toujours être évitées, ce qui signifie beaucoup de travail supplémentaire pour vous et le processeur de requête de tout temps le code est utilisé.
En supposant que vous décidez d'aller avec un texte de type de données de la question est alors devriez-vous utiliser VARCHAR ou CHAR et tandis que beaucoup de ceux qui ont posté dire VARCHAR je vous suggère d'aller avec le jeu de caractères d'une longueur de 4. POURQUOI?
Le type de données VARCHAR est pour les données textuelles dans lequel la taille (la longueur ou le nombre de caractères) est inconnu à l'avance. Pour ce Medicare code nous savons que la longueur doit toujours être d'au moins 4, et éventuellement d'au plus 4 pour l'avenir prévisible. SQL Server gère le stockage des données de manière différente entre les types CHAR et VARCHAR. SQL Server BOL (Livres en Ligne) dit :
Utilisation CHAR lorsque la taille de la colonne, les données entrées sont compatibles
Utilisation VARCHAR lorsque la taille de la colonne de données varie considérablement.
Je ne peux pas dire avec certitude ce qui est vrai pour SQL Server 2008 et jusqu'mais pour les versions antérieures, l'utilisation d'un type de données VARCHAR comporte un nombre supplémentaire de 1 octet par ligne de données par colonne dans une table qui a un type de données VARCHAR. Si les données stockées est toujours la même taille et de même dans votre scénario, il sonne comme il est alors cet octet supplémentaire est un déchet.
À la fin, c'est à vous de savoir si vous aimez CHAR ou VARCHAR mieux, mais certainement ne pas utiliser un type de données numérique pour stocker un code de longueur fixe.
OriginalL'auteur ecarden
Je suis d'accord, à l'aide de
pour la vérification de la contrainte d'utiliser
Cela va forcer un nombre à 4 chiffres seulement pour être accepté...
LIKE
généralement de ne pas accepter les expressions régulières...Microsoft SQL prend en charge ci-dessus, et je crois que la plupart des autres dialectes SQL soutenir quelque chose de similaire...
Sympa, je ne savais pas que sur SQL Server... Généralement, la
LIKE
clause est limitée aux caractères génériques:%
et_
OriginalL'auteur Sparky
Ce n'est pas des données numériques; c'est des données textuelles qui arrive à contenir que des chiffres.
Utiliser un
VARCHAR
.OriginalL'auteur SLaks
Si vous êtes certain que l'APC codes sera toujours numérique (c'est à dire s'il ne serait pas changer dans un avenir proche), une meilleure façon serait de laisser la base de données de la colonne, et de gérer la mise en forme (pour inclure les zéros non significatifs) à des endroits où vous utilisez ce champ des valeurs.
OriginalL'auteur Arun
Si vous avez besoin de leader 0s, alors vous devez utiliser un
varchar
ou autre type de données string.Il existe des moyens pour le format de sortie pour les principaux 0s sans compromettre vos données réelles.
Voir cette entrée de blog pour une méthode facile.
OriginalL'auteur JNK
CHAR(4)
qui semble le plus adapté pour moi (si j'ai bien compris vous avez droit, et le code est toujours de 4 chiffres).OriginalL'auteur a1ex07
Ce que vous voulez utiliser est un type de données VARCHAR avec une contrainte CHECK, en utilisant COMME modèle pour vérifier les valeurs numériques.
OriginalL'auteur Mike Dinescu
en TSQL
iam référence au présent d'une fonction docs.microsoft.com/en-us/sql/t-sql/functions/... elle renvoie 1 si la valeur est un entier ou décimal, par conséquent, cette contrainte de vérification vous permet de valeurs numériques pour être inséré, il est clair maintenant ?
OriginalL'auteur Muflix