Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kembalikan Baris yang Mengandung Nilai Numerik di Oracle

Contoh berikut hanya mengembalikan baris yang memiliki nilai numerik dalam kolom tertentu di Oracle Database.

Contoh-contoh ini menggunakan REGEXP_LIKE berfungsi untuk mengembalikan nilai yang cocok dengan pola yang ditentukan.

Contoh Data

Mari kita buat tabel contoh dengan varchar2 kolom dan masukkan 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;

Mari kita pilih semua data dari tabel:

SELECT * FROM t1;

Hasil:

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

Kolomnya adalah varchar2 kolom, jadi bukan numerik. Itu dapat (dan memang) berisi angka tetapi ini disimpan sebagai data karakter. Itu juga dapat berisi teks arbitrer (yang memang benar).

Kembalikan Semua Nilai Numerik

Kita dapat menggunakan kueri berikut untuk mengembalikan semua nilai numerik dari tabel di atas:

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

Hasil:

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

Kembalikan Bilangan Bulat

Jika kita hanya ingin mengembalikan bilangan bulat, kuerinya bisa jauh lebih sederhana:

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

Hasil:

0
1

Berisi Data Numerik

Jika kita ingin mencari baris yang berisi data numerik (meskipun juga berisi data non-numerik), kita dapat melakukan hal berikut:

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

Hasil:

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

Sebagai alternatif, kita dapat menggunakan kelas POSIX untuk mendapatkan hasil yang sama:

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

Hasil:

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. Hasil tidak berurutan dalam SQL

  2. Mendapatkan ORA-03115:tipe data jaringan atau kesalahan representasi yang tidak didukung saat mengambil array varchar dari pl/sql anonim

  3. Apa Presisi dan Skala default untuk Angka di Oracle?

  4. Apa perbedaan antara 'YYYY' dan 'RRRR' di Oracle SQL

  5. Membuat Timer di Oracle Forms / Forms 6i dan Menampilkan Jam