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

カンマ区切りの値を列に分割する方法

    次のクエリを使用して目的を解決できます-

    Select Value  , Substring(FullName, 1,Charindex(',', FullName)-1) as Name,
    Substring(FullName, Charindex(',', FullName)+1, LEN(FullName)) as  Surname
    from Table1
    

    SQL Serverには既製のSplit関数がないため、ユーザー定義関数を作成する必要があります。

    CREATE FUNCTION Split (
          @InputString                  VARCHAR(8000),
          @Delimiter                    VARCHAR(50)
    )
    
    RETURNS @Items TABLE (
          Item                          VARCHAR(8000)
    )
    
    AS
    BEGIN
          IF @Delimiter = ' '
          BEGIN
                SET @Delimiter = ','
                SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
          END
    
          IF (@Delimiter IS NULL OR @Delimiter = '')
                SET @Delimiter = ','
    
    --INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
    --INSERT INTO @Items VALUES (@InputString) -- Diagnostic
    
          DECLARE @Item           VARCHAR(8000)
          DECLARE @ItemList       VARCHAR(8000)
          DECLARE @DelimIndex     INT
    
          SET @ItemList = @InputString
          SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          WHILE (@DelimIndex != 0)
          BEGIN
                SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
                INSERT INTO @Items VALUES (@Item)
    
                -- Set @ItemList = @ItemList minus one less item
                SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)[email protected])
                SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          END -- End WHILE
    
          IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
          BEGIN
                SET @Item = @ItemList
                INSERT INTO @Items VALUES (@Item)
          END
    
          -- No delimiters were encountered in @InputString, so just return @InputString
          ELSE INSERT INTO @Items VALUES (@InputString)
    
          RETURN
    
    END -- End Function
    GO
    
    ---- Set Permissions
    --GRANT SELECT ON Split TO UserRole1
    --GRANT SELECT ON Split TO UserRole2
    --GO
    


    1. Microsoft SQL Server –SQLサタデーダラスに参加してください

    2. SQL Server 2016:テーブルを作成する

    3. 大きなSQLファイルをインポートするときにMySQLサーバーがなくなりました

    4. MySQLDBの列名のハイフン