SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Cách làm cho toán tử LIKE của SQLite phân biệt chữ hoa chữ thường

Theo mặc định, SQLite LIKE toán tử không phân biệt chữ hoa chữ thường đối với các ký tự ASCII. Điều này có nghĩa là nó sẽ khớp với các ký tự viết hoa và viết thường, bất kể bạn sử dụng kiểu chữ nào trong mẫu của mình.

Tuy nhiên, có một kỹ thuật bạn có thể sử dụng để phân biệt chữ hoa chữ thường.

SQLite có một câu lệnh PRAGMA được gọi là case_sensitive_like , được thiết kế để đặc biệt tạo ra LIKE toán tử phân biệt chữ hoa chữ thường cho các ký tự ASCII.

Lý do tôi chỉ định “ký tự ASCII” là vì LIKE theo mặc định, toán tử có phân biệt chữ hoa chữ thường đối với các ký tự unicode nằm ngoài phạm vi ASCII.

Do đó, nếu bạn cần LIKE toán tử phân biệt chữ hoa chữ thường trong phạm vi ASCII, case_sensitive_like Tuyên bố PRAGMA có thể là những gì bạn đang tìm kiếm.

Điều này cũng áp dụng cho like() , hoạt động giống hệt như LIKE nhà điều hành.

Bật / Tắt Phân biệt chữ hoa chữ thường

Bạn có thể sử dụng bất kỳ giá trị boolean nào sau đây để bật phân biệt chữ hoa chữ thường:

1
on
true
yes

Bạn có thể sử dụng bất kỳ giá trị boolean nào sau đây để tắt phân biệt chữ hoa chữ thường:

0
off
false
no

Đối số có thể nằm trong dấu ngoặc đơn hoặc có thể được phân tách khỏi tên pragma bằng một dấu bằng.

Các đối số từ khóa có thể tùy ý xuất hiện trong dấu ngoặc kép.

Ví dụ về phân biệt chữ hoa chữ thường

Trước tiên, hãy xem điều gì sẽ xảy ra khi chúng tôi không sử dụng case_sensitive_like Tuyên bố PRAGMA.

SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Kết quả:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
1             0           

Trong trường hợp này, cột đầu tiên không phân biệt chữ hoa chữ thường - chữ hoa A khớp với chữ thường a .

Và đây là một truy vấn đối với một bảng cơ sở dữ liệu.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Kết quả:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

Trong trường hợp này, chúng tôi nhận được một trận đấu với tất cả những con mèo có tên bắt đầu bằng Br , mặc dù tiêu chí của chúng tôi đã sử dụng chữ thường b .

Ví dụ về phân biệt chữ hoa chữ thường

Bây giờ, hãy xem điều gì sẽ xảy ra khi chúng tôi sử dụng case_sensitive_like Tuyên bố PRAGMA để bật phân biệt chữ hoa chữ thường trong phạm vi ASCII.

PRAGMA case_sensitive_like = 1;
SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Kết quả:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
0             0           

Vì vậy, lần này chữ hoa A không khớp với chữ thường a .

Và đây là ví dụ về cơ sở dữ liệu sau khi bật phân biệt chữ hoa chữ thường.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Kết quả:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       0                 
Brash       0                 
Broosh      0                 
100%Fluff   0                 
100$Fluff   0                 

Lưu ý rằng tôi không cần chạy lại câu lệnh PRAGMA. Cài đặt vẫn còn nguyên cho kết nối của tôi cho đến khi tôi thay đổi nó.

Tắt phân biệt chữ hoa chữ thường

Dưới đây là một ví dụ về cách tắt phân biệt chữ hoa chữ thường và chạy lại truy vấn.

PRAGMA case_sensitive_like = 0;
SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Kết quả:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

Hàm Like ()

Như đã đề cập, case_sensitive_like Câu lệnh PRAGMA cũng ảnh hưởng đến like() chức năng.

PRAGMA case_sensitive_like = 1;
SELECT 
  CatName,
  like('Br%', CatName),
  like('br%', CatName)
FROM Cats;

Kết quả:

CatName     like('Br%', CatName)  like('br%', CatName)
----------  --------------------  --------------------
Brush       1                     0                   
Brash       1                     0                   
Broosh      1                     0                   
100%Fluff   0                     0                   
100$Fluff   0                     0                   

Toán tử THÍCH Unicode-Aware

Bạn cũng có thể sử dụng tiện ích mở rộng SQLite ICU nếu bạn cần nhận dạng unicode LIKE nhà điều hành.

Việc triển khai LIKE bao gồm trong tiện ích mở rộng này sử dụng hàm ICU u_foldCase() để cung cấp các so sánh độc lập với chữ hoa chữ thường cho đầy đủ các ký tự unicode.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Chèn dữ liệu

  2. SQLiteReadOnlyDatabaseException:cố gắng viết cơ sở dữ liệu chỉ đọc (mã 1032)

  3. Cách hoạt động của SQLite Upper ()

  4. Cách Replace () hoạt động trong SQLite

  5. Nhận thứ Hai đầu tiên, thứ hai, thứ ba hoặc thứ tư của tháng trong SQLite