2018年1月16日 星期二

CSV String 2 Row(Table)

純粹CSV格式字串(: A,B,C),資料可能為使用者輸入或傳入參數等,現已有許多函數或基本作法處理上非常簡便,ORACLE可直接使用DBMS_DEBUG_VC2COLL或使用者自建Type等方法進行轉換,MSSQL2016版本起提供STRING_SPLIT函數可直接呼叫使用。
版本
SQL
MSSQL
2005
SELECT ROW_NUMBER() OVER (ORDER BY GETDATE()) SEQ
     , Split.Col.value('.', 'VARCHAR(100)') AS X
FROM
    (
    SELECT CAST ('<S>'
                   + REPLACE('A,B,C', ',', '</S><S>')
                    + '</S>' AS XML
                    ) AS Val_List
    ) AS A
CROSS APPLY Val_List.nodes ('//S') AS Split(Col)
MSSQL
2016
SELECT value --欄位名稱為value
FROM STRING_SPLIT('A,B,C', ',')
ORACLE
10g
SELECT column_value
FROM TABLE(SYS.DBMS_DEBUG_VC2COLL( 'A','B','C' ) );

SELECT column_value
FROM TABLE( SYS.DBMS_DEBUG_VC2COLL( 1, 2, 3 ));

9i版本可使用自建TYPE即可
CREATE OR REPLACE TYPE SPLIT_TBL AS TABLE OF VARCHAR2(32767) ;

SELECT column_value
FROM TABLE(SPLIT_TBL( 'A','B','C' ) );



沒有留言:

張貼留言