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

3 cách để tìm hàng có chứa chữ thường 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 thường 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ữ thường.

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

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

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

Kết quả:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 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ữ hoa 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ữ hoa tương đương của nó, thì nó đã là chữ hoa để 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 thường éø trừ khi giá trị cũng bao gồm một chữ cái viết thường không phải unicode. SQLite không hỗ trợ đầy đủ các ký tự unicode. Ví dụ:UPPER()LOWER() 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ữ hoa 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ử có mẫu biểu thức chính quy bao gồm rõ ràng từng ký tự viết thường mà chúng tôi muốn đối sánh:

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

Kết quả:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 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é          
1café         
eCafé         
James Bond 007
é             
é 123         
ø             

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

Một cách khác để làm điều đó là chỉ định phạm vi ký tự chữ thường mà chúng tôi muốn đối sánh:

SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';

Kết quả:

c1            
--------------
Café          
café          
1café         
eCafé         
James Bond 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. Cách phát triển một ứng dụng Android gốc ngoại tuyến ưu tiên

  2. Android:Làm thế nào để yêu cầu Con trỏ để làm mới ListView sau khi xóa hàng cơ sở dữ liệu?

  3. gần lỗi synatx (mã 1) chèn Android SQLite

  4. Trả về các hàng có chứa ký tự chữ và số trong SQLite

  5. Cách hiển thị cài đặt lệnh chấm hiện tại trong SQLite