Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kueri SQL untuk menerjemahkan daftar angka yang cocok dengan beberapa rentang, ke daftar nilai

Saya kira Anda ingin meneruskan kumpulan angka itu sebagai string dan membaginya menjadi angka-angka individual. Ini lebih sulit dari yang Anda kira, karena Oracle tidak datang dengan tokenizer bawaan. Aneh, ya?

Ada sejumlah solusi tokenizer PL/SQL yang ada di sekitar Das Interwabs. Saya menggunakan varian implementasi Anup Pani, yang menggunakan Regex (karenanya hanya Oracle 10g atau lebih tinggi). Varian saya mengembalikan larik angka yang telah saya nyatakan sebagai tipe SQL:

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

Type created.

SQL>

Ini berarti saya dapat menggunakannya sebagai input ke fungsi TABLE() dalam pernyataan SELECT:

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

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

SQL>

Ini berarti saya dapat mengubah rangkaian angka Anda menjadi tabel yang dapat saya gabungkan dalam kueri, seperti ini:

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. Pivot dinamis di Oracle sql

  2. Oracle - Mengapa saya harus menggunakan paket daripada prosedur atau fungsi yang berdiri sendiri?

  3. RPAD() Fungsi di Oracle

  4. 12c kolom IDENTITAS

  5. Bagaimana saya bisa menggabungkan beberapa baris ke dalam daftar yang dipisahkan koma di Oracle?