sql >> Database teknologi >  >> RDS >> Oracle

SQL-forespørgsel til at oversætte en liste over tal, der matches mod flere intervaller, til en liste med værdier

Jeg gætter på, at du vil videregive det sæt tal som en streng og opdele dem i individuelle tal. Dette er sværere, end du måske tror, ​​fordi Oracle ikke kommer med en indbygget tokenizer. Underligt, hva'?

Der er en række PL/SQL tokenizer-løsninger, der banker rundt på Das Interwabs. Jeg bruger en variant af Anup Panis implementering, som bruger Regex (derfor kun Oracle 10g eller højere). Min variant returnerer en matrix af tal, som jeg har erklæret som en SQL-type:

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

Type created.

SQL>

Det betyder, at jeg kan bruge det som input til en TABLE()-funktion i en SELECT-sætning:

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

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

SQL>

Det betyder, at jeg kan omdanne din række af tal til en tabel, som jeg kan slutte mig til i en forespørgsel, som denne:

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. Tabeltype i Oracle PL SQL-eksempel

  2. Hvordan afinstallerer/fjerner jeg Oracle 11g (klient)?

  3. SQL Server trunkering og 8192 begrænsning

  4. (Android) Find stien /Android i internt lager