Sql 拆分文本值插入另一个单元格

Sql 拆分文本值插入另一个单元格,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我希望从“名称”列中拆分文本,并在每行的列中插入逗号分隔的数据。例: name parca ---- ------------- john j,jo,joh,john 代码: 有两件事我不能做 我无法将@I值与name行计数相等 我无法检查名称列中的值是否为列 上面的代码只是一个示例。“SURESH”是您的名称字段。您可以从中传递自己的名称值。您可以使用“最终选择”代替“最终选择”来进行更新。尝试此操作,此查询将按预期将单词拆分

我希望从“名称”列中拆分文本,并在每行的列中插入逗号分隔的数据。例:

name            parca
----            -------------
john            j,jo,joh,john
代码:

有两件事我不能做

我无法将@I值与name行计数相等 我无法检查名称列中的值是否为列
上面的代码只是一个示例。“SURESH”是您的名称字段。您可以从中传递自己的名称值。您可以使用“最终选择”代替“最终选择”来进行更新。

尝试此操作,此查询将按预期将单词拆分为字符行,然后您可以合并为一行

DECLARE @Name AS Varchar(100)='Naveen'  

;with cte as
(
select 1 AS Counter,CAST(SUBSTRING(@Name, 1, 1) AS Varchar(100)) Name
union all 
select Counter+1,CAST((Name + ',' + SUBSTRING(@Name, Counter+1, 1))AS Varchar(100)) Name
from cte
where Len(Name) < Len(@Name) + (Len(@Name) -1)
)
select
    Name
   from cte
option(MAXRECURSION 0) 
创建此函数:

create function f_parca
(
 @name varchar(100)
) returns varchar(max)
as
begin
declare @rv varchar(max) = ''

if @name is not null
select top (len(@name)) @rv += ','+ left(@name, number + 1) 
from master..spt_values v
where type = 'p'

return stuff(@rv, 1,1,'')
end
测试功能

select dbo.f_parca('TClausen')
结果:

T,TC,TCl,TCla,TClau,TClaus,TClause,TClausen
按如下方式更新您的表:

UPDATE export1
SET PARCA = dbo.f_parca(name)

你说的手机是什么意思?数据库列?+1但是,从@N中删除第一个逗号可能比使用子字符串更好。我想每个名称都有不同的长度。。。这只能解决部分问题。必须通过光标读取该表。@semihyagcioglu如何在不使用子字符串的情况下消除forst逗号?很抱歉,子字符串可以,但CHARINDEX可能更适合。感谢您的回复,那么,如何更新每个列?不是varchar,而是返回的sql行组谢谢您的关注。如何将此函数用作列更新?有什么想法吗?@user3269841是的,读最后两行代码,这将更新所有行,我看到了。但有一个错误消息Msg 1014,级别15,状态1,第2行TOP子句包含无效值。@user3269841我想您的表中有一个空值。我现在已经考虑到了是的。我的表中有空值。我可以跳过空值吗?
select dbo.f_parca('TClausen')
T,TC,TCl,TCla,TClau,TClaus,TClause,TClausen
UPDATE export1
SET PARCA = dbo.f_parca(name)