Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

2 Cara Mengembalikan Baris yang Hanya Mengandung Karakter Non-Alfanumerik di MySQL

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:]]');

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL :transaksi dalam prosedur tersimpan

  2. MySQL Query - Catatan antara Hari Ini dan 30 Hari Terakhir

  3. Menginstal WordPress 5 di ZEIT Sekarang dengan Hosting MySQL

  4. Bagaimana Anda memilih setiap baris ke-n dari mysql

  5. Gunakan Database Relasional MySQL di Ubuntu 8.04 (Hardy)