Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Suchen Sie nicht numerische Werte in einer Spalte in SQL Server

Es kann vorkommen, dass Sie eine Spalte auf nicht numerische Werte überprüfen müssen. Beispielsweise stellen Sie fest, dass eine Spalte ein varchar ist Spalte, wenn es eigentlich eine numerische Spalte sein sollte.

Dies ist in SQL Server einfach mit dem ISNUMERIC() möglich Funktion.

Beispieldaten

Angenommen, wir erstellen eine Tabelle mit einem varchar Spalte und fügen Sie Daten wie folgt ein:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('+1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Ergebnis:

+-----------+
| c1        |
|-----------|
| 0         |
| 1         |
| +1        |
| -1        |
| +1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Die meisten der oben genannten Werte sind numerisch, obwohl sie sich in einem varchar befinden Säule. Die folgenden Beispiele prüfen diese Spalte auf nicht numerische Werte.

Der ISNUMERIC() Funktion

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;

Ergebnis:

+-----------+
| c1        |
|-----------|
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Hier habe ich ISNUMERIC() verwendet zusammen mit der Funktion Ungleich (<> )-Operator, um nach nicht numerischen Werten zu suchen.

Es kann einen guten Grund dafür geben, dass eine Spalte varchar ist statt numerisch. Aber wenn nicht, sollten die Werte in ihre numerischen Äquivalente konvertiert werden, und dann sollte der Datentyp der Spalte in einen numerischen Typ geändert werden. Dies trägt dazu bei, die Datenintegrität der Datenbank aufrechtzuerhalten.

Werte finden, die keine Zahlen enthalten

Wir können die folgende Abfrage verwenden, um alle Zeilen zurückzugeben, die keine numerischen Werte enthalten.

SELECT c1
FROM t1 
WHERE c1 NOT LIKE '%[0-9]%';

Ergebnis:

+------+
| c1   |
|------|
| a    |
| Ten  |
+------+

Dies ist ein anderes Ergebnis als im vorherigen Beispiel, da wir einfach nach allen Werten suchen, die enthalten nicht enthalten beliebige numerische Daten. Im vorherigen Beispiel haben wir nach Werten gesucht, die nicht numerisch sind.