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

3 cách tìm hàng có chứa chữ hoa trong SQLite

Dưới đây là ba tùy chọn để trả về các hàng có chứa các ký tự viết hoa trong SQLite.

Dữ liệu mẫu

Giả sử chúng ta có một bảng với dữ liệu sau:

.nullvalue null
SELECT c1 FROM t1;

Kết quả:

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

Chúng ta có thể sử dụng các phương pháp sau để trả về các hàng có chứa chữ hoa.

Tùy chọn 1:So sánh với LOWER() Chuỗi

Chúng ta có thể sử dụng LOWER() hàm để so sánh giá trị ban đầu với chữ thường tương đương của nó:

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

Kết quả:

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

Bằng cách sử dụng không bằng (<> ) toán tử (bạn có thể sử dụng != một cách khác thay vì <> nếu bạn thích), chúng tôi chỉ trả về những hàng khác với chữ thường tương đương của chúng. Lý do chúng tôi làm điều này là bởi vì, nếu một giá trị giống với chữ thường tương đương của nó, thì nó đã là chữ thường khi bắt đầu (và chúng tôi không muốn trả lại nó).

SQLite thực hiện tìm kiếm phân biệt chữ hoa chữ thường và vì vậy chúng tôi không cần phải làm bất cứ điều gì khác để có được kết quả mà chúng tôi mong muốn.

Bạn có thể nhận thấy rằng ví dụ trên không trả về các ký tự unicode viết hoa ÉØ trừ khi giá trị cũng bao gồm một chữ cái viết hoa không phải unicode. SQLite không hỗ trợ đầy đủ các ký tự unicode. Ví dụ:LOWER()UPPER() chức năng chỉ cung cấp ánh xạ trường hợp cho 26 chữ cái được sử dụng trong ngôn ngữ tiếng Anh. Do đó, ví dụ trên không chuyển đổi bất kỳ ký tự unicode nào thành chữ thường tương đương của chúng.

Hãy xem phần mở rộng SQLite ICU nếu bạn cần làm việc với các ký tự unicode.

Tùy chọn 2:So sánh với các ký tự thực tế

Một tùy chọn khác là sử dụng REGEXP toán tử với một mẫu biểu thức chính quy bao gồm rõ ràng từng ký tự viết hoa mà chúng tôi muốn đối sánh:

SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Kết quả:

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

Chúng tôi có thể bao gồm các ký tự unicode trong danh sách của mình nếu chúng tôi muốn:

SELECT c1 FROM t1
WHERE c1 REGEXP '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Kết quả:

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

Tùy chọn 3:So sánh với một loạt các ký tự

Một cách khác để làm điều đó là chỉ định phạm vi ký tự hoa mà chúng ta muốn khớp:

SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';

Kết quả:

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. executeSQL () với UPDATE không cập nhật

  2. đặt sqlite db đúng cách trong android

  3. Tự động tăng giá trị 'id' khi chèn vào sqlite

  4. Cơ sở dữ liệu được điền sẵn không hoạt động ở API 28 không có ngoại lệ bảng nào như vậy

  5. SQLITE không thể nâng cấp cơ sở dữ liệu chỉ đọc từ phiên bản 1 lên 2