Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

sql सर्वर अल्पविराम से अलग किए गए मानों को स्तंभों में विभाजित करता है

इस समस्या को गतिशील रूप से हल करें, परिणाम में तदनुसार अधिक कॉलम जोड़ने के लिए DSQL का उपयोग करें।

--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

परिणाम नीचे संलग्न है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL कथन - अनुक्रमण के साथ गति को कैसे सुधार सकते हैं

  2. SQL सर्वर 2005 में तालिका दिलचस्प व्यवहार से तालिका बनाम चयन colA, colB, आदि से * चुनें

  3. टी-एसक्यूएल ट्रिम   (और अन्य गैर-अल्फ़ान्यूमेरिक वर्ण)

  4. SQL सर्वर में दशमलव से अनुगामी शून्य निकालें

  5. तालिका के लिए स्कीमा प्राप्त करना