sql >> データベース >  >> RDS >> Oracle

いくつかの範囲に一致する数値のリストを値のリストに変換するSQLクエリ

    その数字のセットを文字列として渡し、個々の数字に分割したいと思います。 Oracleには組み込みのトークナイザーが付属していないため、これは想像以上に困難です。変だね?

    DasInterwabsをノックアウトするPL/SQLトークナイザーソリューションは多数あります。私は、正規表現を使用するAnup Paniの実装のバリアントを使用しています(したがって、Oracle 10g以降のみ)。私のバリアントは、SQL型として宣言した数値の配列を返します:

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

    これは、SELECTステートメントのTABLE()関数への入力として使用できることを意味します。

    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. ProxySQL:すべてのSevereninesリソース

    2. カスケード削除の影響を受けるテーブルを一覧表示する方法

    3. SQL Serverのスカラー値関数が遅くなるのはなぜですか?

    4. PIVOT、UNPIVOT、およびリバースPIVOTステートメントを理解する