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 É
và Ø
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()
và 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