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

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

Dưới đây là hai phương pháp để trả về các hàng chỉ chứa các ký tự không phải chữ và số trong Cơ sở dữ liệu Oracle.

Ký tự chữ và số là ký tự chữ cái và ký tự số.

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:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 (c1) 
    WITH c AS (
        SELECT 'Music' FROM DUAL UNION ALL
        SELECT 'Live Music' FROM DUAL UNION ALL
        SELECT 'Café' FROM DUAL UNION ALL
        SELECT 'Café Del Mar' FROM DUAL UNION ALL
        SELECT '100 Cafés' FROM DUAL UNION ALL
        SELECT '[email protected]' FROM DUAL UNION ALL
        SELECT '1 + 1' FROM DUAL UNION ALL
        SELECT '()' FROM DUAL UNION ALL
        SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
        SELECT '`~$^+=<>“' FROM DUAL UNION ALL
        SELECT '$1.50' FROM DUAL UNION ALL
        SELECT 'Player 456' FROM DUAL UNION ALL
        SELECT '007' FROM DUAL UNION ALL
        SELECT 'é' FROM DUAL UNION ALL
        SELECT 'É' FROM DUAL UNION ALL
        SELECT 'é 123' FROM DUAL UNION ALL
        SELECT 'ø' FROM DUAL UNION ALL
        SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;

SELECT c1 FROM t1;

Kết quả:

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

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

Chúng ta có thể sử dụng REGEXP_LIKE() của Oracle hàm để so sánh giá trị với một biểu thức chính quy, sau đó phủ định nó bằng NOT nhà điều hành.

Khả năng biểu thức chính quy của Oracle 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 để tìm các hàng có chứa các ký tự không phải chữ và số.

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

Kết quả:

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

Điều đó chỉ trả về những hàng chỉ chứa các ký tự không phải chữ và số. Nếu một hàng chứa cả ký tự chữ và số và không phải chữ và số, thì hàng đó sẽ không được trả về.

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 NOT REGEXP_LIKE(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ố.

Dưới đây là một ví dụ về việc mở rộng phạm vi để loại trừ các ký tự đó khỏi đầu ra:

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');

Kết quả:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các công cụ thích hợp giúp điều chỉnh hoạt động nhanh chóng

  2. Gọi đến hàm không xác định oci_connect ()

  3. Làm cách nào để chạy tệp .sql trong công cụ dành cho nhà phát triển Oracle SQL để nhập cơ sở dữ liệu?

  4. con trỏ:pin S đợi trên X

  5. Làm cách nào để đặt vùng múi giờ cho Kết nối JDBC và tránh không tìm thấy vùng múi giờ SqlException?