MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Gibt nur numerische Werte in MariaDB zurück

Die folgenden MariaDB-Beispiele geben nur die Zeilen zurück, die numerische Werte in einer bestimmten Spalte enthalten.

Diese Beispiele verwenden den REGEXP Funktion, um Werte zurückzugeben, die dem angegebenen Muster entsprechen.

Beispieldaten

Angenommen, wir erstellen eine Tabelle wie diese:

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

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('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;

Die Tabelle ist nun erstellt und enthält folgende Daten:

+-----------+
| c1        |
+-----------+
| 0         |
| 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 Spalte ist ein varchar(255) Spalte, also nicht numerisch. Es kann (und tut) Zahlen enthalten, aber diese werden als Zeichendaten gespeichert. Es kann auch beliebigen Text enthalten (was es auch tut).

Alle numerischen Werte zurückgeben

Wir können die folgende Abfrage verwenden, um alle numerischen Werte aus der obigen Tabelle zurückzugeben:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Ergebnis:

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

Integer zurückgeben

Wenn wir nur ganze Zahlen zurückgeben wollen, kann die Abfrage viel einfacher sein:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Ergebnis:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

Enthält numerische Daten

Wenn wir Zeilen finden wollen, die lediglich enthalten numerische Daten (auch wenn sie auch nicht-numerische Daten enthalten), können wir Folgendes tun:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Ergebnis:

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

POSIX-Zeichenklassen

MariaDB unterstützt POSIX-Zeichenklassen, was bedeutet, dass wir [:digit:] verwenden können statt [0-9] in unseren regulären Ausdrücken.

Beispiel:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[[:digit:]]?$';

Ergebnis:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+