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

Truy vấn SQL để dịch một danh sách các số được so khớp với một số phạm vi, thành một danh sách các giá trị

Tôi đoán bạn muốn chuyển tập hợp số đó dưới dạng một chuỗi và chia thành các số riêng lẻ. Điều này khó hơn bạn nghĩ, bởi vì Oracle không đi kèm với một tokenizer tích hợp sẵn. Kỳ lạ, phải không?

Có một số giải pháp PL / SQL tokenizer xung quanh Das Interwabs. Tôi đang sử dụng một biến thể triển khai của Anup Pani, sử dụng Regex (do đó chỉ Oracle 10g trở lên). Biến thể của tôi trả về một mảng số mà tôi đã khai báo là kiểu SQL:

SQL> create or replace type numbers as table of number
  2  /

Type created.

SQL>

Điều này có nghĩa là tôi có thể sử dụng nó làm đầu vào cho hàm TABLE () trong câu lệnh SELECT:

SQL> select * from table (str_to_number_tokens('20000, 240004, 375000, 255000'))
  2  /

COLUMN_VALUE
------------
       20000
      240004
      375000
      255000

SQL>

Điều này có nghĩa là tôi có thể biến chuỗi số của bạn thành một bảng mà tôi có thể tham gia vào trong một truy vấn, như sau:

SQL> select val
  2  from t23
  3       , ( select column_value as i_no
  4           from table (str_to_number_tokens('20000, 240004, 375000, 255000')) ) sq
  5  where t23.year = 2010
  6  and   sq.i_no between t23.r_min and t23.r_max
  7  order by t23.priority
  8  /

       VAL
----------
        82
        50
        52

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm EXTRACT (datetime) trong Oracle

  2. Thu thập thống kê giản đồ bằng FND_STATS trong EBS 11i và R12

  3. Định dạng ngày mặc định của Oracle là YYYY-MM-DD, TẠI SAO?

  4. Lấy các bản vá cơ sở dữ liệu

  5. Oracle ODP.Net With Entity Framework 6 - Không thể tìm thấy nhà cung cấp tương thích với cơ sở dữ liệu khung Entity