Följande exempel returnerar endast de rader som har numeriska värden i en given kolumn i Oracle Database.
Dessa exempel använder REGEXP_LIKE
funktion för att returnera värden som matchar det angivna mönstret.
Exempeldata
Låt oss skapa en exempeltabell med en varchar2
kolumn och infoga 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;
Låt oss välja all data från tabellen:
SELECT * FROM t1;
Resultat:
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
Kolumnen är en varchar2
kolumn, så den är inte numerisk. Det kan (och innehåller) siffror men dessa lagras som teckendata. Den kan också innehålla godtycklig text (vilket den gör).
Returnera alla numeriska värden
Vi kan använda följande fråga för att returnera alla numeriska värden från tabellen ovan:
SELECT c1
FROM t1
WHERE REGEXP_LIKE(c1, '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$');
Resultat:
0 1 +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 1.2e+4
Returnera heltal
Om vi bara vill returnera heltal kan frågan vara mycket enklare:
SELECT c1
FROM t1
WHERE REGEXP_LIKE(c1, '^[0-9]+$');
Resultat:
0 1
Innehåller numeriska data
Om vi vill hitta rader som innehåller numeriska data (även om de också innehåller icke-numeriska data), kan vi göra följande:
SELECT c1
FROM t1
WHERE REGEXP_LIKE(c1, '[0-9]+');
Resultat:
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
Vi kan alternativt använda POSIX-klasser för att få samma resultat:
SELECT c1
FROM t1
WHERE REGEXP_LIKE(c1, '[[:digit:]]');
Resultat:
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