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

4 cách để tìm hàng có chứa chữ hoa trong Oracle

Dưới đây là bốn tùy chọn để trả về các hàng có chứa các ký tự viết hoa trong Cơ sở dữ liệu Oracle.

Dữ liệu Mẫu

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

SELECT c1 FROM t1;

Kết quả:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 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 Lớp ký tự POSIX

REGEXP_LIKE của Oracle điều kiện tuân thủ tiêu chuẩn biểu thức chính quy POSIX và Nguyên tắc về biểu thức chính quy Unicode. Do đó, chúng tôi có thể sử dụng [:upper:] Lớp ký tự POSIX để kiểm tra các ký tự viết hoa:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');

Kết quả:

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

Tùy chọn 2: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ả:

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

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ó).

Theo mặc định, Oracle thực hiện tìm kiếm phân biệt chữ hoa chữ thường và vì vậy tôi không cần thực hiện bất kỳ thao tác nào khác đối với truy vấn để phân biệt chữ hoa chữ thường.

Tùy chọn 3: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_LIKE điều kiện với 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 REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Kết quả:

CAFÉ
Café
eCafé
James Bond 007
JB 007

'c' chỉ định đối sánh phân biệt chữ hoa chữ thường và phân biệt trọng âm, ngay cả khi đối chiếu được xác định của điều kiện là phân biệt chữ hoa chữ thường hoặc không phân biệt trọng âm.

Lần này ít hàng được trả về hơn trong các ví dụ trước. Đó là vì tôi không chỉ định các ký tự như ÉØ , đã được trả lại trong các ví dụ đó. Kết quả của chúng tôi có chứa É nhưng hàng đó chỉ được trả về vì nó cũng chứa các ký tự viết hoa khác do phù hợp.

Do đó, bạn cần đảm bảo rằng bạn đã bao gồm tất cả các ký tự hợp lệ nếu bạn sử dụng tùy chọn này.

Đây là một lần nữa với hai ký tự được bao gồm:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

Kết quả:

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

Tùy chọn 4: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ự hoa mà chúng ta muốn khớp:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Z]', 'c');

Kết quả:

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. Làm thế nào để tạo hàm trong PL / SQL?

  2. Xóa các hàng trùng lặp khỏi bảng trong Oracle

  3. Làm cách nào để kiểm tra xem một cột có tồn tại hay không trước khi thêm nó vào bảng hiện có trong PL / SQL?

  4. Trở về từ Thế giới mở 2013

  5. SQL:Phân tích cú pháp chuỗi được phân tách bằng dấu phẩy và sử dụng làm phép nối