2009-07-31 7 views
0

Ceci est similaire à CHECK CONSTRAINT of string to contain only digits. (Oracle SQL) mais je veux le faire pour Sybase.Vérifiez la contrainte pour vous assurer que les valeurs d'une colonne de caractères correspondent à tous les chiffres.

J'ai une colonne de caractères 'colExp' (8 caractères). Je veux mettre une contrainte de vérification pour m'assurer que les valeurs de cette colonne sont toutes des chiffres.

Comment est-ce que je peux faire ceci? Cela fonctionnera mais ce n'est pas élégant

colExp LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
+0

@Pradeep, il suffit d'ajouter _Et LEN (colExp) = 8_ pour obtenir la longueur désirée. Aussi, pourquoi ne pas voter? vous l'avez sélectionné comme réponse correcte? –

+1

J'ai oublié de voter; l'a fait maintenant. Et merci pour le conseil – chikak

Répondre

2

Ça fait mal au cerveau, pas comme les travaux (pas de gamme).

SELECT 1 WHERE 'foo' NOT LIKE '%[^0-9]%' 

SELECT 1 WHERE '123' NOT LIKE '%[^0-9]%' 

SELECT 1 WHERE 'aa1' NOT LIKE '%[^0-9]%' 

SELECT 1 WHERE '1bb' NOT LIKE '%[^0-9]%' 

SELECT 1 WHERE NULL NOT LIKE '%[^0-9]%' 

SELECT 1 WHERE ' ' NOT LIKE '%[^0-9]%' 

--FAIL. Need extra check. Perhaps NULLIF 
SELECT 1 WHERE '' NOT LIKE '%[^0-9]%' 

Double Negative et traite de toute longueur

+0

Pourquoi avez-vous écrit Fail pour le dernier cas? ça marche bien ici :-) – chikak

+0

Je viens de me rendre compte que je dois m'assurer que ses 8 chiffres toujours ... – chikak

+0

bien, en fait la question ne dit rien sur la longueur à toujours être 8 caractères donc je vais le prendre comme un réponse acceptée .. – chikak