2009-10-23 10 views
6

Jak mogę napisać instrukcję select, aby wybrać tylko liczby całkowite (i nic więcej) z kolumny char w SQL Server. Na przykład, moja nazwa tabeli jest proszek z 2 kolumny, ID (int) i nazwisko (char (5))Wybierz tylko liczby całkowite z kolumny char przy użyciu SQL Server

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

Chcę móc wybrać tylko te wiersze, które zawierają liczbę całkowitą i nic więcej (ID 3 i 5 ID w tym przykładzie)

Gdy próbuję:

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

... powróci:

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

Wszelkie ide jak uzyskać wiersze zawierające tylko liczby całkowite?

+0

@Andy Wybierz: What RBDMS? MySQL? Serwer SQL? – Asaph

Odpowiedz

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

IsNumeric zwraca 1 dla innych znaków, które są ważne w liczbach, takich jak + i - i $ ale za wejście powinno być w porządku.

+0

Niesamowite, dzięki Chris. –

1

Aby uniknąć problemów z ISNUMERIC i wszystkimi przerwami, -, +,. etc, wykorzystują fakt, że kolumna ma char (5)

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

Edit: dla dowolnej liczby znaków. Podwójne ujemne ...

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

Witam gbn, dziękuję za odpowiedź. co się stanie, jeśli mam wartości w nazwie mniejsze niż 5 znaków? –

1

Użyj pozytywnej i negatywnej kontroli, aby upewnić się, że mamy liczbę całkowitą: Musi zawierać cyfrę. Dozwolone są tylko cyfry i spacje. Między cyframi nie są dozwolone spacje.

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

Ten ostatni to najlepsze, naprawdę dobre prace.

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

O wiele prostsza odpowiedź http://stackoverflow.com/a/3485567/848072 – albfan

4

Spróbuj:

Wybierz * od stołu, gdzie nazwy takie jak '[0-9] %%'

0

Select * z proszku
gdzie nazwa PATINDEX ('% [az]% ', name)! = 0

+0

Jak używać '%' bez podobnych w zapytaniach SQL? – NullPointer

+0

możemy użyć w patindexie, zobacz http://msdn.microsoft.com/en-us/library/aa276881%28v=sql.80%29.aspx – sathish

Powiązane problemy