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

2 cách trả về hàng có chứa ký tự không phải chữ và số trong PostgreSQL

Dưới đây là hai tùy chọn để trả về các hàng chỉ chứa các ký tự không phải chữ và số trong PostgreSQL.

Các ký tự không phải chữ và số bao gồm các ký tự dấu câu như [email protected]#&()–[{}]:;',?/* và các ký hiệu như `~$^+=<>“ , cũng như các ký tự khoảng trắng như khoảng trắng hoặc ký tự tab.

Dữ liệu mẫu

Chúng tôi sẽ sử dụng dữ liệu sau cho các ví dụ của chúng tôi:

SELECT c1 FROM t1;

Kết quả:

+----------------------+
| c1                   |
+----------------------+
| Music                |
| Live Music           |
| Café                 |
| Café Del Mar         |
| 100 Cafés            |
| [email protected]    |
| 1 + 1                |
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| $1.50                |
| Player 456           |
| 007                  |
| NULL                 |
|                      |
| é                    |
| É                    |
| é 123                |
| ø                    |
| ø 123                |
+----------------------+

Tùy chọn 1:So sánh với [:alnum:]

Chúng ta có thể sử dụng !~ của PostgreSQL toán tử để so sánh cột của chúng tôi với một biểu thức chính quy. Chúng tôi sử dụng toán tử này khi chúng tôi muốn chỉ định rằng giá trị không khớp với biểu thức chính quy.

Khả năng biểu thức chính quy của MySQL bao gồm hỗ trợ cho các lớp ký tự POSIX. Do đó, chúng ta có thể sử dụng [:alnum:] Lớp ký tự POSIX trong biểu thức chính quy của chúng tôi.

SELECT c1 FROM t1 
WHERE c1 !~ '[[:alnum:]]';

Kết quả:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 

Chuỗi trống cũng là kiểu số, và do đó ví dụ đó trả về hàng có chứa chuỗi trống.

Chúng tôi có thể loại trừ các chuỗi trống bằng cách sử dụng NULLIF() :

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';

Kết quả:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 

Tùy chọn 2:Chỉ định một phạm vi ký tự

Một cách khác để làm điều đó là chỉ định một dải ký tự trong biểu thức chính quy của bạn.

Ví dụ:

SELECT c1 FROM t1
WHERE c1 !~ '[A-Za-z0-9]';

Kết quả:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

Và để loại bỏ chuỗi trống:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';

Kết quả:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

Trong trường hợp này, phạm vi loại trừ của tôi không bao gồm các ký tự chữ và số như é , Éø , và do đó đầu ra không phải là một biểu diễn thực sự của các ký tự không phải chữ và số. Điều đó nói rằng, ít nhất phương pháp này cung cấp cho bạn tùy chọn để chỉ định các ký tự chính xác mà bạn muốn bao gồm hoặc loại trừ khỏi kết quả.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra KHÔNG ĐẦY ĐỦ cho một bản ghi không trả về TRUE khi biến được đặt

  2. PostgreSQL đang trỗi dậy:Phát hiện Postgres 2018 &Xu hướng 2019

  3. Lỗi Heroku PostgreSQL GROUP_BY trong ứng dụng Rails

  4. FATAL:xác thực mật khẩu không thành công cho postgres của người dùng (postgresql 11 với pgAdmin 4)

  5. Vùng chứa Spring Docker không thể truy cập vùng chứa Postgres Docker