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

SQLで列の値を異なる列に分割するにはどうすればよいですか

    declare @T table
    (
      col_1 varchar(100)
    )
    
    insert into @T values
    ('aa,ab,ac,4,5,6,7,8,9,10'),
    ('ba,bb,bc,4,5,6,7,8,9,10'),
    ('ca,cb,cc,4,5,6,7,8,9,10')
    
    select left(T.col_1, C1.Pos-1) as col_1,
           substring(T.col_1, C1.Pos+1, C2.Pos-C1.Pos-1)  as col_2,
           substring(T.col_1, C2.Pos+1, C3.Pos-C2.Pos-1)  as col_3,
           substring(T.col_1, C3.Pos+1, C4.Pos-C3.Pos-1)  as col_4,
           substring(T.col_1, C4.Pos+1, C5.Pos-C4.Pos-1)  as col_5,
           substring(T.col_1, C5.Pos+1, C6.Pos-C5.Pos-1)  as col_6,
           substring(T.col_1, C6.Pos+1, C7.Pos-C6.Pos-1)  as col_7,
           substring(T.col_1, C7.Pos+1, C8.Pos-C7.Pos-1)  as col_8,
           substring(T.col_1, C8.Pos+1, C9.Pos-C8.Pos-1)  as col_9,
           stuff(T.col_1, 1, C9.Pos, '') as col_10
    from @T as T
      cross apply (select charindex(',', col_1)) as C1(Pos)
      cross apply (select charindex(',', col_1, C1.Pos+1)) as C2(Pos)
      cross apply (select charindex(',', col_1, C2.Pos+1)) as C3(Pos)
      cross apply (select charindex(',', col_1, C3.Pos+1)) as C4(Pos)
      cross apply (select charindex(',', col_1, C4.Pos+1)) as C5(Pos)
      cross apply (select charindex(',', col_1, C5.Pos+1)) as C6(Pos)
      cross apply (select charindex(',', col_1, C6.Pos+1)) as C7(Pos)
      cross apply (select charindex(',', col_1, C7.Pos+1)) as C8(Pos)
      cross apply (select charindex(',', col_1, C8.Pos+1)) as C9(Pos)
      

    1. `date`は有効なmysql列名ですか?

    2. 日、週、月、年ごとの統計を保持するためのデータベース構造

    3. PostgreSql INSERT FROM SELECT RETURNING ID

    4. 接続文字列が正しくないため、AzureMySQLサーバーへの接続が失敗します