gpt4 book ai didi

sql - 分割字符串后将值插入表中

转载 作者:行者123 更新时间:2023-12-03 02:45:23 25 4
gpt4 key购买 nike

我想将值插入员工表中。这些值采用字符串格式 ~ 分隔

例如:AA~B~123

我使用以下函数分割它

CREATE FUNCTION [db_owner].[FN_Split] (@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)

select @idx = 1
if len(@String)<1 or @String is null return

while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String

if(len(@slice)>0)
insert into @temptable(Items) values(@slice)

set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end

现在我得到输出为

SELECT * FROM db_owner.FN_Split('AA~B~123','~')

输出

items
______
AA
B
123

现在我被困在这里了

如何在员工表中插入以上值???

喜欢

insert into employee (name,add,phone)
values('AA','B','123');

请指导。

尝试过但不起作用

insert into employee
SELECT * FROM db_owner.FN_Split('AA~BB~CC','~')

错误

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

最佳答案

您正在使用字符串分割函数,该函数将您的项目作为行返回。您需要一个将它们作为列返回的函数。

或者您可以直接在查询中执行此操作。也许是这样的。

declare @S varchar(10) = 'AA~B~123'

select left(@S, T1.Pos - 1) as Col1,
substring(@S, T1.Pos+1, T2.Pos-T1.Pos-1) as Col2,
substring(@S, T2.Pos+1, len(@S)-T2.Pos) as Col3
from (select charindex('~', @S)) as T1(Pos)
cross apply (select charindex('~', @S, T1.Pos+1)) as T2(Pos)

结果:

Col1       Col2       Col3
---------- ---------- ----------
AA B 123

这是一个适用于 SQL Server 2000 的版本

declare @S varchar(10) 
set @S = 'AA~B~123'

select left(@S, T.Pos1 - 1) as Col1,
substring(@S, T.Pos1+1, T.Pos2-T.Pos1-1) as Col2,
substring(@S, T.Pos2+1, len(@S)-T.Pos2) as Col3
from (select T.Pos1,
charindex('~', @S, T.Pos1+1) as Pos2
from (select charindex('~', @S) as Pos1) as T
) as T

关于sql - 分割字符串后将值插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com