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

複数の区切り文字を使用する複数の行への SQL 列の区切り値の分割

    これを試してください:

    こちら

    ;with T(id, Cols) as
    (
      select 1, '10 x 1234 description1,11 x 456 description2' 
      UNION ALL
      select 2, '40 x 123478 description3,51 x 45678 description4' 
    ),
    --first split all comma separated into different rows
    CTE2 AS 
    (
        SELECT id, 
        CAST(N'<H><r>' + replace(Replace(Vals.a.value('.', 'NVARCHAR(50)'),
            ' ','|'), '|', '</r><r>') + '</r></H>' as XML) Cols
        FROM
        (
        SELECT *,CAST (N'<H><r>' + Replace(cols,',','</r><r>') + 
            '</r></H>' AS XML) AS [vals]
        FROM T) d
        CROSS APPLY d.[vals].nodes('/H/r') Vals(a)
    )
    -- split all ' ' demilited values now
    SELECT distinct id, Vals.a.value('(/H/r)[1]', 'VARCHAR(100)') AS Qty,
    Vals.a.value('(/H/r)[2]', 'VARCHAR(100)') AS X,
    Vals.a.value('(/H/r)[3]', 'VARCHAR(100)') AS ItemNo,
    Vals.a.value('(/H/r)[4]', 'VARCHAR(100)') AS Description
    FROM
    (
    SELECT *
    FROM CTE2) d
    CROSS APPLY d.[cols].nodes('/H/r') Vals(a)
    


    1. OracleSQLで2つの日付間の経過時間を検索します

    2. 2列のギャップとアイランド-列Aが連続していて列Bが同一の場合

    3. OracleCloudのMAAドキュメント

    4. Mysqlインデックスを使用したEntityFramework