sql >> Databáze >  >> RDS >> Oracle

Vraťte řádky, které obsahují číselné hodnoty v Oracle

Následující příklady vrátí pouze ty řádky, které mají číselné hodnoty v daném sloupci v databázi Oracle.

Tyto příklady používají REGEXP_LIKE funkce vrátí hodnoty, které odpovídají zadanému vzoru.

Ukázková data

Pojďme vytvořit ukázkovou tabulku s varchar2 sloupec a vložte data:

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;

Vyberme všechna data z tabulky:

SELECT * FROM t1;

Výsledek:

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

Sloupec je varchar2 sloupec, takže není číselný. Může (a obsahuje) čísla, ale ty jsou uloženy jako znaková data. Může také obsahovat libovolný text (což obsahuje).

Vrátit všechny číselné hodnoty

K vrácení všech číselných hodnot z výše uvedené tabulky můžeme použít následující dotaz:

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

Výsledek:

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

Vrátit celá čísla

Pokud chceme vrátit pouze celá čísla, dotaz může být mnohem jednodušší:

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

Výsledek:

0
1

Obsahuje číselná data

Pokud chceme najít řádky, které obsahují číselné údaje (i když obsahují i ​​nečíselné údaje), můžeme provést následující:

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

Výsledek:

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

K získání stejného výsledku můžeme alternativně použít třídy POSIX:

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

Výsledek:

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

  1. Jak extrahovat podřetězec z řetězce v Oracle/SQLite

  2. PERIOD_ADD() Příklady – MySQL

  3. Transformace řádků na sloupce v MySQL

  4. Automatické zvýšení hodnoty 'id' při vkládání do sqlite