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