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