In MySQL können Sie eine Abfrage wie die folgende ausführen, um nicht numerische Daten aus der Spalte zurückzugeben.
Dies kann hilfreich sein, wenn Sie jemals eine Spalte finden, die numerische Daten enthält, aber als varchar
eingerichtet wurde oder char
Säule. Sie können diese Abfrage verwenden, um alle nicht numerischen Werte zu finden, die möglicherweise in die Spalte eingefügt wurden. Sie können dann beliebig damit umgehen, sie beispielsweise in numerisch umwandeln und dann den Spaltentyp ändern.
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'),
('.5'),
('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 wurde erstellt und enthält die folgenden Zeilen:
+-----------+ | c1 | +-----------+ | 0 | | 1 | | +1 | | -1 | | .5 | | 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 nicht numerischen Werte zurückgeben
Wir können die folgende Abfrage verwenden, um nicht numerische Werte aus der obigen Tabelle zurückzugeben:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Ergebnis:
+-----------+ | c1 | +-----------+ | 12.e-3 | | a | | 9afc | | Ten | | 5 Dollars | +-----------+
Nicht-Ganzzahlen zurückgeben
Wenn wir nur Nicht-Ganzzahlen zurückgeben wollen, kann die Abfrage viel einfacher sein:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[0-9]+$';
Ergebnis:
+-----------+ | c1 | +-----------+ | +1 | | -1 | | .5 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Enthält keine numerischen Daten
Wenn wir nur Zeilen finden möchten, die keine numerischen Daten enthalten, können wir Folgendes tun:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[0-9]+';
Ergebnis:
+------+ | c1 | +------+ | a | | Ten | +------+