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

Temukan Semua Nilai Non-Numerik dalam Kolom di Oracle

Jika Anda pernah menemukan kolom karakter yang seharusnya berupa kolom numerik, selalu ada kemungkinan kolom tersebut berisi data non-numerik yang tidak Anda ketahui.

Di Oracle Database, Anda dapat menjalankan kueri seperti berikut untuk mengembalikan data non-numerik dari kolom.

Contoh Data

Mari kita buat tabel contoh dengan VARCHAR2 kolom dan masukkan data:

DROP TABLE t1;
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;

Berikut isi tabel tersebut:

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 varchar(255) 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 Non-Numerik

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

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

Hasil:

12.e-3
a
9afc
e7
+e0
Ten
5 Dollars

Mengembalikan Non-Bilangan Bulat

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

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

Hasil:

+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

Perhatikan bahwa contoh ini juga mengecualikan bilangan bulat bertanda.

Tidak Mengandung Data Numerik

Jika kita hanya ingin menemukan baris yang tidak berisi data numerik, kita dapat melakukan hal berikut:

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

Hasil:

a
Ten

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

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

Hasil:

a
Ten

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekayasa Balik Model Data menggunakan Oracle SQL Developer

  2. Bagaimana cara mendapatkan tahun berjalan menggunakan SQL di Oracle?

  3. Teks Oracle keluar dengan kurung kurawal dan wildcard

  4. Durasi data dalam tabel Sementara Global?

  5. Cara membuat batasan bukan nol di Oracle