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

4 cách để tìm hàng có chứa ký tự chữ hoa trong PostgreSQL

Dưới đây là bốn tùy chọn để trả về các hàng có chứa chữ hoa trong PostgreSQL.

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ả:

       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 Lớp ký tự POSIX

Chúng ta có thể sử dụng ~ toán tử để thực hiện đối sánh phân biệt chữ hoa chữ thường của một mẫu biểu thức chính quy. Mẫu có thể đơn giản hoặc phức tạp tùy thích.

Một tùy chọn đơn giản là so sánh cột của chúng tôi với [:upper:] Lớp ký tự POSIX:

SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';

Kết quả:

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

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

Một tùy chọn khác là 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
 É
 É 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, PostgreSQL thực hiện đối sánh phân biệt chữ hoa chữ thường và do đó, chúng tôi không cần chỉ định đối chiếu phân biệt chữ hoa chữ thường để có được kết quả mà chúng tôi mong muốn.

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 ~ 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 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Kết quả:

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

Trong trường hợp này, ít hàng được trả về hơn trong các ví dụ trước. Điều này là do 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 đó, tùy chọn này bị hạn chế hơn tùy chọn trước đó, nhưng nó cung cấp cho bạn nhiều quyền kiểm soát hơn đối với các ký tự bạn muốn khớp.

Tùy chọn 4:So sánh với một phạm vi ký tự

Ngoài ra, chúng tôi có thể chỉ định phạm vi ký tự mà chúng tôi muốn đối sánh:

SELECT c1 FROM t1
WHERE c1 ~ '[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. lưu đối tượng python trong bảng postgres với dưa chua

  2. Truyền kiểu NULL khi cập nhật nhiều hàng

  3. Sao chép bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong Postgres

  4. Truy vấn postgresql giữa các phạm vi ngày

  5. Cách bật TimescaleDB trên cơ sở dữ liệu PostgreSQL hiện có