Die folgenden SQLite-Beispiele geben nur die Zeilen zurück, die numerische Werte in einer bestimmten Spalte enthalten.
Beispieldaten
Lassen Sie uns eine Tabelle mit Beispieldaten erstellen:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
c1
);
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),
('Ten'),
('5 Dollars');
SELECT * FROM t1;
Die Tabelle ist nun erstellt und enthält folgende Daten:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 Ten 5 Dollars
SQLite verwendet ein dynamisches Typsystem, bei dem der Datentyp eines Werts mit dem Wert selbst verknüpft ist, nicht mit der Spalte (wie bei den meisten anderen RDBMS). Als ich die Tabelle erstellt habe, habe ich keinen Datentyp angegeben. Daher können die Werte von jedem Typ sein.
Der Typeof()
Funktion
Wir können die typeof()-Funktion von SQLite verwenden, um die Ergebnisse auf nur numerische Typen (real
) zu filtern und integer
):
SELECT c1
FROM t1
WHERE typeof(c1) = 'real'
OR typeof(c1) = 'integer';
Ergebnis:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Nur um das klarzustellen, hier ist ein Beispiel, das den Datentyp für jede Zeile ausgibt:
SELECT
c1,
typeof(c1)
FROM t1;
Ergebnis:
c1 typeof(c1) ---------- ---------- 0 integer 1 integer 1 integer -1 integer 0.0 real 73.45 real 73.45 real -73.45 real 0.246 real -3400000.0 real 0.012 real 12000.0 real Ten text 5 Dollars text
Der REGEXP
Funktion
Wenn wir spezifischere Anforderungen haben, können wir alternativ REGEXP
verwenden um einen regulären Ausdruck zu übergeben, um nur die Werte zurückzugeben, die dem gegebenen Muster entsprechen.
Beispiel:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Ergebnis:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Integer zurückgeben
Wenn wir nur Ganzzahlen zurückgeben wollen, können wir die Abfrage wie folgt vereinfachen:
SELECT c1
FROM t1
WHERE typeof(c1) = 'integer';
Ergebnis:
c1 -- 0 1 1 -1
Dies gibt auch vorzeichenbehaftete Ganzzahlen zurück.
Oder wir könnten einen regulären Ausdruck verwenden, wenn unsere Anforderungen spezifischer sind:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[0-9]+$';
Ergebnis:
c1 -- 0 1 1
Enthält numerische Daten
Wenn wir Zeilen finden wollen, die numerische Daten enthalten (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 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 5 Dollars