Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zapytanie SQL do przetłumaczenia listy liczb dopasowanych z kilku zakresów na listę wartości

Domyślam się, że chcesz przekazać ten zestaw liczb jako ciąg i podzielić na pojedyncze liczby. Jest to trudniejsze niż mogłoby się wydawać, ponieważ Oracle nie ma wbudowanego tokenizera. Dziwne, co?

Istnieje wiele rozwiązań tokenizatorów PL/SQL, które pukają wokół Das Interwabs. Używam wariantu implementacji Anup Pani, który wykorzystuje Regex (stąd tylko Oracle 10g lub wyższy). Mój wariant zwraca tablicę liczb, które zadeklarowałem jako typ SQL:

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

Type created.

SQL>

Oznacza to, że mogę go użyć jako danych wejściowych do funkcji TABLE() w instrukcji SELECT:

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

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

SQL>

Oznacza to, że mogę zamienić Twój ciąg liczb w tabelę, do której mogę dołączyć w zapytaniu, na przykład:

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. Jak wyświetlić typ zmiennej w PL/SQL?

  2. Jak użyć kolumny obliczeniowej do obliczenia innej kolumny w tym samym widoku

  3. Jak używać wykonania natychmiastowego z klauzulą ​​INTO w bazie danych Oracle

  4. Oracle 11g — Jak zoptymalizować powolny wybór wstawiania równoległego?

  5. podzapytanie skalarne w instrukcji if Warunek w PL/SQL