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

varchar2 を解析して複数の行にする方法は?

    パイプライン関数を使用できます:

    CREATE or replace TYPE test_type AS TABLE OF varchar2(40)
    
    CREATE or replace FUNCTION test_func (d VARCHAR2)
       RETURN test_type
       PIPELINED
    IS
    BEGIN
       FOR C1 IN (    SELECT REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) x
                        FROM DUAL
                  CONNECT BY REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) IS NOT NULL)
       LOOP
          PIPE ROW (c1.x);
       END LOOP;
    END;
    /
    
    WITH test
         AS ( your_query_here )
    SELECT x.id2, x.mydate, y.*
      FROM test x, TABLE (test_func (x.d)) y
      

    ここでは、日付 (予約語) の代わりに mydate を使用し、データの代わりに d を使用しています。サンプル:

    WITH test
         AS (SELECT 2 AS id2, SYSDATE AS mydate, '1.0,1.1,1.2,11,1.4,1.5,2.6,2.7,2.8,2.9,44,55' AS d FROM DUAL
             UNION ALL
             SELECT 3 AS id2, SYSDATE + 1 AS mydate, '19.5,19.9,11.5,11.1,21.2,33,1.4,1.5,2.6,2.7,2.8,2.9' AS d
               FROM DUAL
             UNION ALL
             SELECT 4 AS id2, SYSDATE + 1 AS mydate, '9.5,9.9,1.5,1.1,1.2,66,1.4,1.5,2.6,2.7,2.8,2.9' AS d
               FROM DUAL)
    SELECT x.id2, x.mydate, y.*
      FROM test x, TABLE (test_func (x.d)) y
      

    いくつかのリンク:

    カンマ区切りの文字列を分割してselect文のIN句に渡す方法

    パイプライン化された並列テーブル関数の使用



    1. SQL Serverに座標(経度/緯度、Googleマップから)を保存するための最良の方法は何ですか?

    2. MySQL 5.1でキーの長さを増やすにはどうすればよいですか?

    3. phpを使用してtxtファイルをpostgresにインポートする際の問題

    4. 明示的なANSIJOINと暗黙的な結合の使用に関するOracleの公式推奨事項はありますか?