2009-10-23 14 views
6

Comment puis-je écrire une instruction select pour sélectionner uniquement des entiers (et rien de plus) à partir d'une colonne char dans SQL Server. Par exemple, mon nom de la table est POUDRE avec 2 colonnes, ID (int) et le nom (char (5))Sélectionnez uniquement les entiers de la colonne char à l'aide de SQL Server

ID  Name 
-- ---------- 
1  AXF22 
2  HYWWW 
3  24680 
4  8YUH8 
5  96635 

Je veux être en mesure de sélectionner uniquement les lignes qui contiennent un nombre entier et rien de plus (ID 3 et ID 5 dans cet exemple)

Si je tente:

SELECT * 
    FROM POWDER 
WHERE Name LIKE '[0-9]%' 

... il retournera:

ID  Name 
-- ---------- 
3  24680 
4  8YUH8 
5  96635 

Tout ide comment obtenir les lignes contenant uniquement des entiers?

+0

@Andy Select: Qu'est-ce que RBDMS? MySQL? Serveur SQL? – Asaph

Répondre

12
SELECT * FROM POWDER WHERE IsNumeric(Name) = 1 

retours IsNumeric 1 pour d'autres caractères qui sont valides en nombre, tels que + et - et $, mais pour votre entrée, vous devriez être bien.

+0

Génial, merci Chris. –

1

Pour éviter les problèmes avec ISNUMERIC et tous les espaces, -, +,. etc, en utilisant le fait que la colonne est char (5)

SELECT * 
    FROM POWDER 
WHERE Name LIKE '[0-9][0-9][0-9][0-9][0-9]' 

Edit: pour un nombre quelconque de caractères. Double négatif ...

SELECT * 
    FROM POWDER 
WHERE Name NOT LIKE '%[^0-9]%' 
+0

Salut gbn, merci pour votre réponse. Que se passe-t-il si j'ai des valeurs Nom inférieures à 5 caractères? –

1

Utiliser des contrôles positifs et négatifs pour nous assurer d'avoir un entier: Il doit contenir un chiffre. Seuls les chiffres et les espaces sont autorisés. Aucun espace n'est autorisé entre les chiffres.

SELECT * 
    FROM POWDER 
WHERE Name LIKE '%[0-9]%' 
    AND Name NOT LIKE '%[^0-9 ]%' 
    AND Name NOT LIKE '%[0-9]% %[0-9]%' 
-1

Le dernier est le meilleur, le genre de travaux vraiment très bien.

SELECT * FROM POWDER 
    WHERE Name LIKE '%[0-9]%'  
     AND Name NOT LIKE '%[^0-9 ]%'  
     AND Name NOT LIKE '%[0-9]% %[0-9]%' 
+0

Une réponse beaucoup plus simple http://stackoverflow.com/a/3485567/848072 – albfan

4

Essayez ceci:

SELECT * FROM table où Nom LIKE '[0-9] %%'

0

SELECT * FROM POUDRE
OÙ Nom patindex ('% [az]% ', nom)! = 0

+0

Comment pouvez-vous utiliser '%' sans comme dans les requêtes SQL? – NullPointer

+0

nous pouvons utiliser dans patindex se référer http://msdn.microsoft.com/en-us/library/aa276881%28v=sql.80%29.aspx – sathish

Questions connexes