sql >> Database teknologi >  >> RDS >> Oracle

Returner rækker, der indeholder numeriske værdier i Oracle

Følgende eksempler returnerer kun de rækker, der har numeriske værdier i en given kolonne i Oracle Database.

Disse eksempler bruger REGEXP_LIKE funktion til at returnere værdier, der matcher det angivne mønster.

Eksempel på data

Lad os oprette en eksempeltabel med en varchar2 kolonne og indsæt 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;

Lad os vælge alle data fra 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

Kolonnen er en varchar2 kolonne, så den er ikke numerisk. Det kan (og gør) indeholde tal, men disse gemmes som tegndata. Den kan også indeholde vilkårlig tekst (hvilket den gør).

Returner alle numeriske værdier

Vi kan bruge følgende forespørgsel til at returnere alle numeriske værdier fra ovenstående tabel:

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

Returner heltal

Hvis vi kun ønsker at returnere heltal, kan forespørgslen være meget enklere:

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

Resultat:

0
1

Indeholder numeriske data

Hvis vi ønsker at finde rækker, der indeholder numeriske data (selvom de også indeholder ikke-numeriske data), kan vi gøre følgende:

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 bruge POSIX klasser for at få det samme 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

  1. SQL Server Triggere – Del 2 DDL &LOGON Triggere

  2. Vælg n tilfældige rækker fra SQL Server-tabellen

  3. Sjovt med Djangos nye Postgres-funktioner

  4. java , Korrekt brug af statiske variabler for at forhindre dødvande - Synkronisering