Di bawah ini adalah dua opsi untuk menemukan baris yang hanya berisi karakter non-alfanumerik di MySQL.
Karakter non-alfanumerik mencakup karakter tanda baca seperti [email protected]#&()–[{}]:;',?/*
dan simbol seperti `~$^+=<>“
, serta karakter spasi putih seperti karakter spasi atau tab.
Contoh Data
Kami akan menggunakan data berikut untuk contoh kami:
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 VALUES
('Music'),
('Live Music'),
('Café'),
('Café Del Mar'),
('100 Cafés'),
('[email protected]'),
('1 + 1'),
('()'),
('[email protected]#&()–[{}]:;'',?/*'),
('`~$^+=<>“'),
('$1.50'),
('Player 456'),
('007'),
(null),
(''),
('é'),
('É'),
('é 123'),
('ø'),
('ø 123');
SELECT c1 FROM t1;
Hasil:
+----------------------+ | c1 | +----------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +----------------------+
Opsi 1:Bandingkan dengan [:alnum:]
Kita dapat menggunakan REGEXP
MySQL operator untuk membandingkan kolom kami dengan ekspresi reguler.
Kemampuan ekspresi reguler MySQL mencakup dukungan untuk kelas karakter POSIX. Oleh karena itu, kita dapat menggunakan [:alnum:]
Kelas karakter POSIX dalam ekspresi reguler kami untuk menemukan baris yang hanya berisi karakter alfanumerik, lalu meniadakannya dengan NOT
operator.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]';
Hasil:
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | | +----------------------+
Jika Anda perlu mengecualikan karakter tertentu, Anda selalu dapat menggunakan NULLIF()
fungsi.
Misalnya, mari kita kecualikan string kosong dari baris terakhir:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';
Hasil:
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | +----------------------+
Opsi 2:Tentukan Rentang Karakter
Cara lain untuk melakukannya adalah dengan menentukan rentang karakter dalam ekspresi reguler Anda.
Contoh:
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]';
Hasil:
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | | | é | | É | | ø | +----------------------+
Dan untuk menghapus string kosong:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';
Hasil:
+----------------------+ | c1 | +----------------------+ | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | é | | É | | ø | +----------------------+
Dalam hal ini, rentang pengecualian saya tidak mencakup karakter alfanumerik seperti é
, É
, dan ø
, dan hasilnya bukan representasi sebenarnya dari karakter non-alfanumerik. Meskipun demikian, setidaknya metode ini memberi Anda opsi untuk menentukan karakter persis yang ingin Anda sertakan atau kecualikan dari hasil.
Alternatif untuk REGEXP
Di MySQL, RLIKE
dan REGXP
operator adalah sinonim untuk REGEXP_LIKE()
. Oleh karena itu, kita dapat mengganti salah satu contoh sebelumnya dengan NOT RLIKE
atau NOT REGEXP_LIKE()
.
Contoh RLIKE
:
SELECT c1 FROM t1
WHERE c1 NOT RLIKE '[[:alnum:]]';
Contoh REGEXP_LIKE()
:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');