Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách đảo ngược các từ trong một cột

Để thực hiện tác vụ này, bạn sẽ cần một hàm t-sql và một con trỏ. fn_SplitList sẽ cho phép bạn phân tách dựa trên dấu phân cách. Khi bạn có chức năng này, bạn có thể tạo một con trỏ để chạy trên dữ liệu của bạn khi cập nhật từng bản ghi. Tôi đã tạo một ví dụ bằng @ table1.

Chức năng

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

Mã để thực hiện cập nhật

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo thông báo lỗi tùy chỉnh trong kiểm tra ràng buộc trong SQL SERVER 2008

  2. Xóa tất cả các ký tự sau khoảng trắng đầu tiên trong SSRS 2005

  3. Nhận tối thiểu hai giá trị trong SQL

  4. Chỉ nhận Tháng và Năm từ SQL DATE

  5. Trong SQL, làm cách nào để tôi có thể chia các giá trị trong tổng số mặt nạ bit thành một chuỗi được phân tách bằng dấu phẩy