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

máy chủ sql chia các giá trị được phân tách bằng dấu phẩy thành các cột

Giải quyết vấn đề này một cách tự động, sử dụng DSQL để thêm các cột khác trong kết quả cho phù hợp.

--create split function
CREATE FUNCTION [dbo].[SO_Split]
(
    @List nvarchar(2000),
    @SplitOn nvarchar(5)
) 
RETURNS @RtnValue table
(

    Id int identity(1,1),
    Value nvarchar(100)
)
AS 
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
    Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
    Set @List =Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
    Insert Into @RtnValue (Value)
    Select Value = ltrim(rtrim(@List))
    Return
END

--below is the dynamic solution for this problem
declare @sql nvarchar(3000) = 'select *'
declare @cnt int = 1
declare @rowNum int = (select max(a) from (select(select max(id) as id_max from dbo.so_split(mul_query,'*')) as a from #test) as b)

while(@cnt <= @rowNum)
begin
    set @sql = @sql + N', ISNULL((select value from dbo.so_split(mul_query,''*'') where id = '+cast(@cnt as nvarchar(5))+N'),''1'')'
    set @cnt = @cnt + 1
end

set @sql = @sql + N' from #test'

exec sp_executesql @sql

Kết quả được đính kèm bên dưới.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hãy nhớ điều này khi định dạng kiểu dữ liệu TIME trong SQL Server (T-SQL)

  2. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác

  3. Thay thế giá trị null trong truy vấn sql pivot động

  4. 2 cách lấy ngôn ngữ mặc định của đăng nhập trong SQL Server (T-SQL)

  5. SQL Thêm khóa ngoại vào cột hiện có