Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zwróć wiersze zawierające wartości liczbowe w Oracle

Poniższe przykłady zwracają tylko te wiersze, które mają wartości liczbowe w danej kolumnie w Oracle Database.

W tych przykładach użyto REGEXP_LIKE funkcja zwracająca wartości pasujące do określonego wzorca.

Przykładowe dane

Stwórzmy przykładową tabelę z varchar2 kolumna i wstaw dane:

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;

Wybierzmy wszystkie dane z tabeli:

SELECT * FROM t1;

Wynik:

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

Kolumna to varchar2 kolumna, więc nie jest liczbowa. Może (i zawiera) liczby, ale są one przechowywane jako dane znakowe. Może również zawierać dowolny tekst (co robi).

Zwróć wszystkie wartości liczbowe

Możemy użyć następującego zapytania, aby zwrócić wszystkie wartości liczbowe z powyższej tabeli:

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

Wynik:

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

Zwracane liczby całkowite

Jeśli chcemy zwrócić tylko liczby całkowite, zapytanie może być dużo prostsze:

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

Wynik:

0
1

Zawiera dane liczbowe

Jeśli chcemy znaleźć wiersze, które zawierają dane numeryczne (nawet jeśli zawierają również dane nienumeryczne), możemy wykonać następujące czynności:

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

Wynik:

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

Możemy alternatywnie użyć klas POSIX, aby uzyskać ten sam wynik:

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

Wynik:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Połącz kilka kolumn w jedną

  2. ORA-00838

  3. Przykład instrukcji Oracle FOR LOOP SELECT

  4. Dobra praktyka otwierania/zamykania połączeń w aplikacji asp.net?

  5. uzyskać liczbę unikalnych wartości bez oddzielania wartości należących do tego samego bloku wartości