2012-03-07 29 views
20

Tôi muốn tạo một truy vấn mà tôi chọn tất cả hồ sơ mà chứa các ký tự mà không phải là az hoặc AZOracle SQL - REGEXP_LIKE chứa các ký tự khác ngoài az hoặc AZ

nên một cái gì đó như thế này

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '![A-Z] [a-z]')

+1

IIRC, hãy thử 'NOT REGEXP_LIKE()', mặc dù đó là cho MySQL. – Bojangles

+1

@JamWaffles Nếu tôi hiểu, OP sẽ tìm kiếm các kết quả có chứa bất kỳ ký tự không phải alpha nào. Vì vậy, một 'NOT' sẽ chỉ trả lại các hàng có chứa các ký tự _no_ alpha. –

+1

@Michael Rất tiếc! Cảm ơn vì đã nhận thấy điều đó. Bây giờ tôi cảm thấy ngớ ngẩn. – Bojangles

Trả lời

33

Các ^ phủ nhận một lớp nhân vật:

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '[^A-Za-z]') 
+0

Khi chúng tôi chạy, chúng tôi trả về các bản ghi như 'AB Future'. Có phải chúng ta làm sai điều gì? Chạy cùng một truy vấn như trên ... FYI có câu hỏi tương tự mở tại http://stackoverflow.com/questions/30948012/oracle-query-to-find-string-not-containing-characters –

+1

@Marcus Mẫu hình đối với _any_ ký tự khác với các chữ cái trên/dưới và các khoảng trắng duy nhất của bạn. Nó không thực thi rằng chuỗi chứa _only_ không phải chữ cái. Nếu bạn phải đảm bảo rằng các ký tự _no_ không phải chữ cái được khớp, hãy neo regex như '^ [^ A-Za-z] + $' - tôi nghĩ đó là những gì bạn đang hỏi. Mẫu neo không được khớp vì không gian. –

+0

Về cơ bản, tôi đang tìm một chuỗi có ký tự _other_ hơn AZ, az cùng với các ký tự phụ như 0-9, ',', '-', v.v. –

9

Something như

select * 
    from foo 
where regexp_like(col1, '[^[:alpha:]]') ; 

nên làm việc

SQL> create table foo(col1 varchar2(100)); 

Table created. 

SQL> insert into foo values('abc'); 

1 row created. 

SQL> insert into foo values('abc123'); 

1 row created. 

SQL> insert into foo values('def'); 

1 row created. 

SQL> select * 
    2 from foo 
    3 where regexp_like(col1, '[^[:alpha:]]') ; 

COL1 
-------------------------------------------------------------------------------- 
abc123 
Các vấn đề liên quan