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

SQL Server で 1 つの列を 2 つの列に分割する方法

    これを試してください:

    select 
        case when CHARINDEX('_',name)>0 
             then SUBSTRING(name,1,CHARINDEX('_',name)-1) 
             else name end firstname, 
        CASE WHEN CHARINDEX('_',name)>0 
             THEN SUBSTRING(name,CHARINDEX('_',name)+1,len(name))  
             ELSE NULL END as lastname
    from emp
     

    CASE コマンドを使用して、利用可能な姓を制御できます。

    SQL フィドル

    MS SQL Server 2008 スキーマのセットアップ :

    クエリ 1 :

    declare @t table (id int, name  varchar(50))
    
    insert into @t (id,name) values( 1    ,'abc_rao')
    insert into @t (id,name) values( 2    ,'nani')
    insert into @t (id,name) values( 3    ,'hari_babu')
    insert into @t (id,name) values( 4    ,'kalibabu')
    insert into @t (id,name) values( 5    ,'ab_tan')
    
    select 
        case when CHARINDEX('_',name)>0 
             then SUBSTRING(name,1,CHARINDEX('_',name)-1) 
             else name end firstname, 
        CASE WHEN CHARINDEX('_',name)>0 
             THEN SUBSTRING(name,CHARINDEX('_',name)+1,len(name))  
             ELSE NULL END as lastname
    from @t
     

    結果 :

    <プレ>| FIRSTNAME | LASTNAME | |-----------|----------| | abc | rao | | nani | (null) | | hari | babu | | kalibabu | (null) | | ab | tan |

    更新:sqlfiddle が追加されました



    1. フォローアップ Q:Oracle テーブルの行を比較し、一致する行を更新する

    2. クエリでLIMITを使用するとMySQLが遅いのはなぜですか?

    3. MySql INSERT MAX()+1の問題

    4. Oracleセッションの一時テーブルのデータはいつ削除されますか?