Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Geben Sie Zeilen zurück, die numerische Werte in Oracle enthalten

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

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

Beispieldaten

Lassen Sie uns eine Beispieltabelle mit einem varchar2 erstellen Spalte und Daten einfügen:

CREATE TABLE t1 (
    c1 varchar2(255)
);
INSERT ALL 
INTO t1 (c1) VALUES ('0')
INTO t1 (c1) VALUES ('1')
INTO t1 (c1) VALUES ('+1')
INTO t1 (c1) VALUES ('-1')
INTO t1 (c1) VALUES ('00.00')
INTO t1 (c1) VALUES ('73.45')
INTO t1 (c1) VALUES ('+73.45')
INTO t1 (c1) VALUES ('-73.45')
INTO t1 (c1) VALUES ('.246')
INTO t1 (c1) VALUES ('-.34e7')
INTO t1 (c1) VALUES ('12.e-3')
INTO t1 (c1) VALUES ('1.2e+4')
INTO t1 (c1) VALUES ('a')
INTO t1 (c1) VALUES ('9afc')
INTO t1 (c1) VALUES ('e7')
INTO t1 (c1) VALUES ('+e0')
INTO t1 (c1) VALUES ('Ten')
INTO t1 (c1) VALUES ('5 Dollars')
SELECT 1 FROM DUAL;

Lassen Sie uns alle Daten aus der Tabelle auswählen:

SELECT * FROM t1;

Ergebnis:

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 varchar2 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 REGEXP_LIKE(c1, '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$');

Ergebnis:

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

Integer zurückgeben

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

SELECT c1
FROM t1 
WHERE REGEXP_LIKE(c1, '^[0-9]+$');

Ergebnis:

0
1

Enthält numerische Daten

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

SELECT c1 
FROM t1 
WHERE REGEXP_LIKE(c1, '[0-9]+');

Ergebnis:

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

Wir können alternativ POSIX-Klassen verwenden, um dasselbe Ergebnis zu erhalten:

SELECT c1 
FROM t1 
WHERE REGEXP_LIKE(c1, '[[:digit:]]');

Ergebnis:

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