sql >> Database >  >> RDS >> Oracle

SQL-query om een ​​lijst met getallen die overeenkomen met verschillende bereiken, te vertalen naar een lijst met waarden

Ik vermoed dat je die reeks getallen als een tekenreeks wilt doorgeven en in afzonderlijke getallen wilt splitsen. Dit is moeilijker dan je zou denken, omdat Oracle geen ingebouwde tokenizer heeft. Vreemd, hè?

Er zijn een aantal PL/SQL-tokenizer-oplossingen die rond Das Interwabs kloppen. Ik gebruik een variant van de implementatie van Anup Pani, die Regex gebruikt (vandaar alleen Oracle 10g of hoger). Mijn variant retourneert een reeks getallen die ik heb gedeclareerd als een SQL-type:

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

Type created.

SQL>

Dit betekent dat ik het kan gebruiken als invoer voor een TABLE()-functie in een SELECT-instructie:

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

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

SQL>

Dit betekent dat ik uw reeks getallen kan omzetten in een tabel die ik kan gebruiken in een query, zoals deze:

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. Een back-up maken van een PostgreSQL-database en deze herstellen via DBeaver

  2. Oct2014CPU crasht ArcGIS Desktop

  3. Wat is het Oracle-datumopmaakmasker voor tijdzones?

  4. Hoe de LCASE()-functie werkt in MySQL