Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

5 Cara Mengembalikan Baris yang Mengandung Huruf Kecil di SQL Server

Jika Anda perlu menemukan baris yang berisi huruf kecil di SQL Server, Anda dapat mencoba salah satu opsi berikut.

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 kecil.

Opsi 1:Bandingkan dengan UPPER() String

Kita dapat menggunakan UPPER() fungsi untuk membandingkan nilai asli dengan ekuivalen huruf besar:

SELECT * FROM t1
WHERE UPPER(c1) COLLATE Latin1_General_CS_AS <> c1;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

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

Kami juga menggunakan COLLATE Latin1_General_CS_AS untuk secara eksplisit menentukan susunan peka huruf besar/kecil (dan peka aksen). Tanpa ini, Anda bisa mendapatkan hasil yang tidak diharapkan, tergantung pada susunan yang digunakan pada sistem Anda.

Opsi 2:Bandingkan dengan Karakter Sebenarnya

Sebagai alternatif, kita dapat menggunakan LIKE operator, dan tentukan karakter huruf kecil sebenarnya yang ingin kita cocokkan:

SELECT * FROM t1
WHERE c1 LIKE '%[abcdefghijklmnopqrstuvwxyz]%'
COLLATE Latin1_General_CS_AS;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Dalam hal ini, lebih sedikit baris yang dikembalikan daripada contoh sebelumnya. Ini karena saya tidak menentukan karakter seperti é dan ø , yang dikembalikan dalam contoh sebelumnya. Meskipun satu baris mengandung é , baris tersebut hanya dikembalikan karena juga berisi karakter huruf kecil lain yang cocok.

Oleh karena itu, contoh ini lebih terbatas daripada yang sebelumnya, tetapi memberikan Anda kontrol lebih besar atas karakter yang ingin Anda cocokkan.

Opsi 3:Bandingkan dengan Rentang Karakter

Sebagai alternatif, kita dapat menentukan rentang karakter yang ingin kita cocokkan:

SELECT * FROM t1
WHERE c1 LIKE '%[a-z]%'
COLLATE Latin1_General_100_BIN2;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Dalam hal ini, saya menggunakan susunan biner (Latin1_General_100_BIN2 ). Saya melakukan ini karena susunan biner mengurutkan setiap kasus secara terpisah (seperti ini:AB....YZ...ab...yz ).

Susunan lain cenderung mencampurkan huruf besar dan huruf kecil (seperti ini:AaBb...YyZz ), yang karenanya akan cocok dengan karakter huruf besar dan kecil.

Opsi 4:Temukan Instance Pertama dari Karakter Huruf Kecil

Cara lain untuk melakukannya adalah dengan menggunakan PATINDEX() fungsi:

SELECT * FROM t1
WHERE PATINDEX('%[abcdefghijklmnopqrstuvwxyz]%', c1
COLLATE Latin1_General_CS_AS) > 0;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Dalam contoh ini, kami menentukan karakter persis yang ingin kami cocokkan, dan dalam hal ini, kami tidak mendapatkan baris dengan karakter seperti é dan ø (selain yang juga berisi karakter lain yang cocok).

Salah satu manfaat dari teknik ini adalah kita dapat menggunakannya untuk mengabaikan karakter pertama (atau jumlah karakter tertentu) jika kita menginginkannya:

SELECT * FROM t1
WHERE PATINDEX('%[abcdefghijklmnopqrstuvwxyz]%', c1
COLLATE Latin1_General_CS_AS) > 1;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| 1café          |
| James Bond 007 |
+----------------+

Oleh karena itu, kami dapat mengembalikan semua baris yang berisi karakter huruf kecil, tetapi karakter pertama bukan huruf kecil.

Ini karena PATINDEX() mengembalikan posisi awal kemunculan pola pertama (dalam kasus kami, pola adalah daftar karakter huruf kecil). Jika posisi awal kemunculan pertama lebih besar dari 1, maka karakter pertama tidak ada dalam daftar karakter huruf kecil kami.

Meskipun teknik ini dapat digunakan untuk mengabaikan karakter pertama yang menjadi huruf besar, tidak menutup kemungkinan bahwa karakter pertama bisa menjadi karakter lain, seperti angka. Kita bisa melihat ini di baris kedua, yang berisi 1café .

Opsi 5:Temukan Instance Pertama Berdasarkan Rentang

Kita juga bisa menggunakan PATINDEX() dengan rentang:

SELECT * FROM t1
WHERE PATINDEX('%[a-z]%', c1
COLLATE Latin1_General_100_BIN2) > 1;

Hasil:

+----------------+
| c1             |
|----------------|
| Café           |
| 1café          |
| James Bond 007 |
+----------------+

Saya kembali menggunakan susunan biner (seperti dengan contoh rentang lainnya).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menghentikan/Memulai Antrian Surat Database di SQL Server (T-SQL)

  2. Bagaimana saya bisa memasukkan data ke SQL Server menggunakan VBNet?

  3. SQRT() Contoh di SQL Server

  4. Apa arti stempel waktu di T-Sql dalam C #?

  5. Memasukkan Daftar<> ke dalam tabel SQL Server