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

SQLServer-文字列内でn番目のオカレンスを検索します

    片道(2k8);

    select 'abc_1_2_3_4.gif  ' as img into #T
    insert #T values ('zzz_12_3_3_45.gif')
    
    ;with T as (
        select 0 as row, charindex('_', img) pos, img from #T
        union all
        select pos + 1, charindex('_', img, pos + 1), img
        from T
        where pos > 0
    )
    select 
        img, pos 
    from T 
    where pos > 0   
    order by img, pos
    
    >>>>
    
    img                 pos
    abc_1_2_3_4.gif     4
    abc_1_2_3_4.gif     6
    abc_1_2_3_4.gif     8
    abc_1_2_3_4.gif     10
    zzz_12_3_3_45.gif   4
    zzz_12_3_3_45.gif   7
    zzz_12_3_3_45.gif   9
    zzz_12_3_3_45.gif   11
    

    更新

    ;with T(img, starts, pos) as (
        select img, 1, charindex('_', img) from #t
        union all
        select img, pos + 1, charindex('_', img, pos + 1)
        from t
        where pos > 0
    )
    select 
        *, substring(img, starts, case when pos > 0 then pos - starts else len(img) end) token
    from T
    order by img, starts
    
    >>>
    
    img                 starts  pos     token
    abc_1_2_3_4.gif     1       4       abc
    abc_1_2_3_4.gif     5       6       1
    abc_1_2_3_4.gif     7       8       2
    abc_1_2_3_4.gif     9       10      3
    abc_1_2_3_4.gif     11      0       4.gif  
    zzz_12_3_3_45.gif   1       4       zzz
    zzz_12_3_3_45.gif   5       7       12
    zzz_12_3_3_45.gif   8       9       3
    zzz_12_3_3_45.gif   10      11      3
    zzz_12_3_3_45.gif   12      0       45.gif
    


    1. 子行を追加または更新できません:外部キー制約が失敗します

    2. MySQLとMariaDBのデータベースの高可用性の概要

    3. BCPを使用してリモートSQLServerに書き込む方法は?

    4. 大きなテキスト/CSVファイルをPLSQLで複数のファイルに分割