sql >> Databáze >  >> RDS >> Oracle

SQL dotaz pro převod seznamu čísel shodných s několika rozsahy na seznam hodnot

Hádám, že chcete předat tuto sadu čísel jako řetězec a rozdělit na jednotlivá čísla. To je těžší, než si myslíte, protože Oracle nepřichází s vestavěným tokenizérem. Divný, co?

V Das Interwabs existuje řada řešení PL/SQL tokenizerů. Používám variantu implementace Anup Pani, která používá Regex (proto pouze Oracle 10g nebo vyšší). Moje varianta vrací pole čísel, které jsem deklaroval jako typ SQL:

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

Type created.

SQL>

To znamená, že jej mohu použít jako vstup pro funkci TABLE() v příkazu SELECT:

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

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

SQL>

To znamená, že mohu změnit váš řetězec čísel na tabulku, ke které se mohu připojit v dotazu, jako je tento:

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. pip instalace se nezdaří s /usr/bin/clang:Žádný takový soubor nebo adresář

  2. jak zkopírovat data ze souboru do PostgreSQL pomocí JDBC?

  3. Metadata týkající se typů záznamů na úrovni balíčků PL/SQL

  4. Jak ELT() funguje v MariaDB