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

列内の単語を反転する方法

    このタスクを実行するには、t-sql 関数とカーソルが必要です。 fn_SplitList を使用すると、区切り記号に基づいて分割できます。この関数を取得したら、各レコードを更新するデータに対して実行するカーソルを作成できます。 @table1 を使用して例を作成しました。

    機能

    CREATE FUNCTION [dbo].[fn_SplitList]
    (
        @RowData varchar(8000),
        @SplitOn varchar(5)
    )  
    RETURNS @RtnValue table 
    (
        Id int identity(1,1),
        Data varchar(100)
    ) 
    AS  
    BEGIN 
        Declare @Cnt int
        Set @Cnt = 1
    
        While (Charindex(@SplitOn,@RowData)>0)
        Begin
            Insert Into @RtnValue (data)
            Select 
                Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
    
            Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
            Set @Cnt = @Cnt + 1
        End
    
        Insert Into @RtnValue (data)
        Select Data = ltrim(rtrim(@RowData))
    
        Return
    END
    

    更新を実行するコード

    declare @table1 table(id int primary key
                         ,words varchar(max))
    declare @id int
    declare @words varchar(max)
    
    insert into @table1 values(0, 'word1, word2, , word3, word4')
    insert into @table1 values(1, 'word1, word2, word3, ,')
    insert into @table1 values(2, 'word1,,,, ; word2')
    insert into @table1 values(3, ';word1 word2, word3')
    
    declare updateCursor cursor for
    select id
          ,words
      from @table1
    
    open updateCursor   
    fetch next from updateCursor into @id, @words
    while @@fetch_status = 0
    begin
      declare @row varchar(255)
    
      select @row = coalesce(@row+', ', '') + data
        from dbo.fn_SplitList(@words, ',')
      order by id desc
    
      update @table1
         set words = @row
       where id = @id
    
      fetch next from updateCursor into @id, @words
    end
    close updateCursor   
    deallocate updateCursor
    
    select *
      from @table1
    


    1. PythonスクリプトからMySQLテーブルにデータを挿入します

    2. PHPMySQLが複数のテーブルにデータを挿入する

    3. 最初のIDを挿入した後にcfloopが停止するのはなぜですか?

    4. Postgresqlが存在する場所からの遅い削除