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

可変長の区切られた文字列を複数の行に分割する (SQL)

    最初に、これが、そもそもフィールドにコンマ区切りのデータを入れるべきではない理由です。それを扱う簡単で効率的な方法はありません。

    つまり、再帰クエリを使用して文字列を分割し、そこから数値を取得できます:

    with split as
    (
      select
        item = cast('' as varchar(max)),
        source = cast('20,0, 5,,^24,0, 0,,^26,0, 0,,^281,0, 0,,^34,0, 2,,^48,0, 2,,^44,0, 2,,^20,0, 10,,^20,5, 5,,^379,1, 1,,^26,1, 2,,^32,0, 1,,^71,0, 2,,^' as varchar(max))
      union all
      select
        item = substring(source, 1, charindex(',,', source)),
        source = substring(source, charindex(',,', source) + 2, 10000)
      from split
      where source > ''
    )
    select substring(item, 1, charindex(',', item) -1)
    from split
    where item > ''
    

    結果:

    20
    ^24
    ^26
    ^281
    ^34
    ^48
    ^44
    ^20
    ^20
    ^379
    ^26
    ^32
    ^71
    



    1. リスニングポートによるLAN上のMySQLサーバーの検出(Inno Setup)

    2. MySQLが集計関数なしでgroupbyクエリを許可するのはなぜですか?

    3. 他のユーザーが変更を加えたときにWindowsプログラムを更新しますか?

    4. ORACLE(11.2.0.1.0)-日付式を使用した再帰CTE