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

ORA-12728:phạm vi không hợp lệ trong biểu thức chính quy

Regexp không sử dụng \ để bảo vệ - trong biểu thức dấu ngoặc . Bạn chỉ phải đặt - là ký tự đầu tiên, ngay sau dấu ngoặc mở đầu:

IF REGEXP_LIKE('--,,::', '[\-,:]*')
...

=> ORA-12728: invalid range in regular expression

Nếu bạn tò mò, khi gặp [\-,:] Oracle hiểu: "bất kỳ ký tự nào trong phạm vi từ \ thành , hoặc ký tự : " . Lý do tại sao điều này tạo ra một ngoại lệ là \ dường như là sau , theo giá trị ASCII của chúng. Và Oracle không chấp nhận phạm vi có giá trị bắt đầu sau giá trị kết thúc.

Mặt khác:

 IF REGEXP_LIKE('--,,::', '[-,:]*')

Hoạt động như mong đợi.

Như một lưu ý phụ, [-,:]{0,1} nghĩa là "không hoặc một lần xuất hiện - hoặc , hoặc : " có thể được viết [-,:]? .


  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ú pháp SQL Oracle:Mã định danh được trích dẫn

  2. Độ dài tối đa của tên bảng trong Oracle là bao nhiêu?

  3. sự cố khi sử dụng các tham số Oracle trong SELECT IN

  4. Hỗ trợ đa ngôn ngữ trong 11i / R12

  5. Điền một bảng PL / SQL từ một khối trong các biểu mẫu D2k của Oracle