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

So geben Sie nur numerische Werte in SQL Server zurück

In SQL Server können wir ISNUMERIC() verwenden Funktion, um numerische Werte aus einer Spalte zurückzugeben.

Wir können alternativ eine separate Abfrage ausführen, um alle Werte zurückzugeben, die numerische Daten enthalten.

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 |
+-----------+

Da dies ein varchar ist Spalte enthält sie Zeichendaten. Es kann numerische Daten enthalten, wird aber nicht als numerischer Typ gespeichert. Daher kann die Spalte sowohl Textdaten als auch Zahlen enthalten. Die folgenden Beispiele prüfen diese Spalte auf numerische Werte.

Der ISNUMERIC() Funktion

SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;

Ergebnis:

+--------+
| c1     |
|--------|
| 0      |
| 1      |
| +1     |
| -1     |
| +1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 12.e-3 |
| 1.2e+4 |
+--------+

Hier habe ich den ISNUMERIC() verwendet zusammen mit der Funktion Gleich (= )-Operator, um die numerischen Werte zurückzugeben. Die Funktion gibt 1 zurück wenn es numerisch ist und 0 wenn nicht.

Werte finden, die Zahlen enthalten

Wir können die folgende Abfrage verwenden, um alle Zeilen zurückzugeben, die numerische Werte enthalten (auch wenn sie auch andere Zeichen enthalten).

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

Ergebnis:

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

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