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

2 Cara Mengembalikan Baris yang Mengandung Karakter Alfanumerik di MySQL

Di bawah ini adalah dua opsi untuk menemukan baris yang berisi karakter alfanumerik di MySQL.

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 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 berisi karakter alfanumerik.

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:]]+$';

Hasil:

+-------+
| c1    |
+-------+
| Music |
| Café  |
| 007   |
| é     |
| É     |
| ø     |
+-------+

Itu hanya mengembalikan baris yang tidak berisi apa pun selain karakter alfanumerik. Jika baris berisi karakter alfanumerik dan non-alfanumerik, baris tidak akan dikembalikan.

Karakter spasi dianggap non-alfanumerik, jadi jika kita ingin memasukkan spasi, kita bisa melakukan ini:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:] ]+$';

Hasil:

+---------------+
| c1            |
+---------------+
| Music         |
| Live Music    |
| Café          |
| Café Del Mar  |
| 100 Cafés     |
| Player 456    |
| 007           |
| é             |
| É             |
| é 123         |
| ø             |
| ø 123         |
+---------------+

Untuk mengembalikan semua baris yang berisi karakter alfanumerik (meskipun baris juga berisi karakter non-alfanumerik), kita dapat melakukan ini:

SELECT c1 FROM t1 
WHERE c1 REGEXP '[[:alnum:]]';

Hasil:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é                 |
| É                 |
| é 123             |
| ø                 |
| ø 123             |
+-------------------+

Opsi 2:Tentukan Rentang Karakter

Cara lain untuk melakukannya adalah dengan memberikan ekspresi reguler yang menyediakan berbagai karakter. Kami masih dapat menggunakan REGEXP operator untuk melakukan ini.

Contoh:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9]+$';

Hasil:

+-------+
| c1    |
+-------+
| Music |
| 007   |
+-------+

Ini mengembalikan lebih sedikit baris daripada dengan contoh pertama kami. Itu karena saya tidak menyertakan é , É , atau ø karakter dalam jangkauan saya, dan setiap baris yang berisi karakter tersebut dikecualikan dari output.

Oleh karena itu, Anda harus berhati-hati saat menggunakan metode ini, jika Anda tidak sengaja mengecualikan karakter yang harus Anda sertakan.

Namun, dengan mempertahankan rentang ini, kami dapat menyertakan spasi seperti ini:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

Hasil:

+------------+
| c1         |
+------------+
| Music      |
| Live Music |
| Player 456 |
| 007        |
+------------+

Dan kita dapat menggunakan yang berikut ini untuk memasukkan semua baris yang berisi karakter dari jangkauan kami (meskipun mereka juga mengandung karakter di luar kisaran ini):

SELECT c1 FROM t1 
WHERE c1 REGEXP '[A-Za-z0-9]';

Hasil:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é 123             |
| ø 123             |
+-------------------+

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 RLIKE atau REGEXP_LIKE() .

Contoh RLIKE :

SELECT c1 FROM t1 
WHERE c1 RLIKE '^[[:alnum:]]+$';

Contoh REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE 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. Bagaimana cara mengubah CHARACTER SET (dan COLLATION) di seluruh database?

  2. Kesalahan umum MySQL:"Mendapat kesalahan saat membaca paket komunikasi"

  3. Cara Mengamankan Server MySQL/MariaDB

  4. Cara Mengotomatiskan Kueri Tabel Pivot di MySQL

  5. JSON_VALUE() di MySQL