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

3 Cara Menemukan Baris yang Mengandung Huruf Besar di MySQL

Berikut adalah tiga opsi untuk mengembalikan baris yang berisi karakter huruf besar di MySQL.

Contoh Data

Misalkan kita memiliki tabel dengan data berikut:

SELECT c1 FROM t1;

Hasil:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| JB 007         |
| 007            |
| NULL           |
|                |
| É              |
| É 123          |
| é              |
| é 123          |
| ø              |
| Ø              |
+----------------+

Kita dapat menggunakan metode berikut untuk mengembalikan baris yang berisi huruf besar.

Opsi 1:Bandingkan dengan LOWER() String

Kita dapat menggunakan LOWER() fungsi untuk membandingkan nilai asli dengan ekuivalen huruf kecilnya:

SELECT c1 FROM t1
WHERE CAST(LOWER(c1) AS BINARY) <> CAST(c1 AS BINARY);

Hasil:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
| É              |
| É 123          |
| Ø              |
+----------------+

Dengan menggunakan tidak sama dengan (<> ) operator (sebagai alternatif, Anda dapat menggunakan != bukannya <> jika Anda mau), kami hanya mengembalikan baris yang berbeda dengan persamaan huruf kecilnya. Alasan kami melakukan ini adalah karena, jika suatu nilai sama dengan ekuivalen huruf kecilnya, maka itu adalah huruf kecil untuk memulainya (dan kami tidak ingin mengembalikannya).

Secara default, MySQL melakukan pencarian case-insensitive, jadi saya menggunakan CAST() berfungsi untuk mentransmisikan nilai ke biner untuk mendapatkan pencarian peka huruf besar/kecil.

Anda juga dapat menggunakan BINARY operator untuk memberikan nilai ke biner, tetapi operator ini tidak digunakan lagi pada MySQL 8.0.27 dan dapat dihapus pada rilis mendatang.

Bagaimanapun, ini adalah tampilan kode saat menggunakan BINARY operator:

SELECT c1 FROM t1
WHERE BINARY LOWER(c1) <> BINARY c1;

Bisa juga seperti ini:

SELECT c1 FROM t1
WHERE BINARY(LOWER(c1)) <> BINARY(c1);

Berikut adalah hasil yang saya dapatkan dari keduanya saat menjalankan kode di MySQL 8.0.27:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
| É              |
| É 123          |
| Ø              |
+----------------+
8 rows in set, 2 warnings (0.00 sec)

Dan ketika saya menunjukkan peringatan:

SHOW WARNINGS;

Hasil:

+---------+------+----------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                      |
+---------+------+----------------------------------------------------------------------------------------------+
| Warning | 1287 | 'BINARY expr' is deprecated and will be removed in a future release. Please use CAST instead |
| Warning | 1287 | 'BINARY expr' is deprecated and will be removed in a future release. Please use CAST instead |
+---------+------+----------------------------------------------------------------------------------------------+

Opsi 2:Bandingkan dengan Karakter Sebenarnya

Pilihan lainnya adalah dengan menggunakan REGEXP operator dengan pola ekspresi reguler yang secara eksplisit menyertakan setiap karakter huruf besar yang ingin kita cocokkan:

SELECT c1 FROM t1
WHERE CAST(c1 AS BINARY) REGEXP CAST('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' AS BINARY);

Hasil:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
+----------------+

Kali ini lebih sedikit baris yang dikembalikan daripada di contoh sebelumnya. Itu karena saya tidak menentukan karakter seperti É dan Ø , yang dikembalikan dalam contoh tersebut. Hasil kami memang mengandung É tetapi baris itu hanya dikembalikan karena juga berisi karakter huruf besar lain yang lakukan cocok.

Oleh karena itu, Anda harus memastikan bahwa Anda memiliki semua karakter yang valid yang tercakup jika menggunakan opsi ini.

Opsi 3:Bandingkan dengan Rentang Karakter

Cara lain untuk melakukannya adalah dengan menentukan rentang karakter huruf besar yang ingin kita cocokkan:

SELECT c1 FROM t1
WHERE CAST(c1 AS BINARY) REGEXP CAST('[A-Z]' AS BINARY);

Hasil:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 007         |
+----------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara SELECT INTO dan INSERT INTO di MySQL

  2. Permintaan UNION dengan pola rekaman aktif codeigniter

  3. Migrasi dari MySQL ke PostgreSQL - Yang Harus Anda Ketahui

  4. Cara menyimpan tanggal berulang dengan mengingat Waktu Musim Panas

  5. mysqli atau PDO - apa kelebihan dan kekurangannya?