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 é
và ø
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()
và 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