Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL заявка за преобразуване на списък с числа, съпоставени с няколко диапазона, в списък със стойности

Предполагам, че искате да предадете този набор от числа като низ и да го разделите на отделни числа. Това е по-трудно, отколкото си мислите, защото Oracle не се предлага с вграден токенизатор. Странно, а?

Има редица PL/SQL токенизатори решения, които се чупят около Das Interwabs. Използвам вариант на реализацията на Anup Pani, който използва Regex (следователно само Oracle 10g или по-висока). Моят вариант връща масив от числа, които съм декларирал като SQL тип:

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

Type created.

SQL>

Това означава, че мога да го използвам като вход за функция TABLE() в оператор SELECT:

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

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

SQL>

Това означава, че мога да превърна вашия низ от числа в таблица, към която мога да се присъединя в заявка, както следва:

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. Възможно ли е да се използва return в съхранена процедура?

  2. Курсор на Oracle за присвояване

  3. Как да преброите броя на появяванията на символ в стойност на Oracle varchar?

  4. Не може да се потвърди, с опция за новалидиране

  5. Автоматично увеличение в Oracle без използване на тригер