Di bawah ini adalah dua metode untuk mengembalikan baris yang hanya berisi karakter non-alfanumerik di Oracle Database.
Karakter alfanumerik adalah karakter alfabet dan karakter numerik.
Contoh Data
Kami akan menggunakan data berikut untuk contoh kami:
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 (c1)
WITH c AS (
SELECT 'Music' FROM DUAL UNION ALL
SELECT 'Live Music' FROM DUAL UNION ALL
SELECT 'Café' FROM DUAL UNION ALL
SELECT 'Café Del Mar' FROM DUAL UNION ALL
SELECT '100 Cafés' FROM DUAL UNION ALL
SELECT '[email protected]' FROM DUAL UNION ALL
SELECT '1 + 1' FROM DUAL UNION ALL
SELECT '()' FROM DUAL UNION ALL
SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
SELECT '`~$^+=<>“' FROM DUAL UNION ALL
SELECT '$1.50' FROM DUAL UNION ALL
SELECT 'Player 456' FROM DUAL UNION ALL
SELECT '007' FROM DUAL UNION ALL
SELECT 'é' FROM DUAL UNION ALL
SELECT 'É' FROM DUAL UNION ALL
SELECT 'é 123' FROM DUAL UNION ALL
SELECT 'ø' FROM DUAL UNION ALL
SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;
SELECT c1 FROM t1;
Hasil:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 () [email protected]#&()–[{}]:;',?/* `~$^+=<>“ $1.50 Player 456 007 é É é 123 ø ø 123
Opsi 1:Bandingkan dengan [:alnum:]
Kita dapat menggunakan REGEXP_LIKE()
Oracle berfungsi untuk membandingkan nilai dengan ekspresi reguler, lalu meniadakannya dengan NOT
operator.
Kemampuan ekspresi reguler Oracle mencakup dukungan untuk kelas karakter POSIX. Oleh karena itu, kita dapat menggunakan [:alnum:]
Kelas karakter POSIX dalam ekspresi reguler kami untuk menemukan baris yang berisi karakter non-alfanumerik.
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');
Hasil:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Itu hanya mengembalikan baris yang berisi karakter non-alfanumerik saja. Jika baris berisi karakter alfanumerik dan non-alfanumerik, baris tidak akan dikembalikan.
Opsi 2:Tentukan Rentang Karakter
Cara lain untuk melakukannya adalah dengan menentukan rentang karakter dalam ekspresi reguler Anda.
Contoh:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-z0-9]');
Hasil:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
Dalam hal ini, rentang pengecualian saya tidak mencakup karakter alfanumerik seperti é
, É
, dan ø
, dan hasilnya bukan representasi sebenarnya dari karakter non-alfanumerik.
Berikut ini contoh perluasan rentang untuk mengecualikan karakter tersebut dari output:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');
Hasil:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“