Sql server 在SQLServer2005中将字符串拆分为三个变量
我有一根绳子Sql server 在SQLServer2005中将字符串拆分为三个变量,sql-server,Sql Server,我有一根绳子 declare @s varchar(100), set @s='aaaa,bbbb,cccc' declare @first varchar(100), declare @second varchar(100), declare @third varchar(100) 现在我需要将这些字符串拆分为三个变量,其中包含如下值 @first=aaaa @second=bbbb @third=cccc aaaa bbbb cccc 如果我使用split函数,那么我得到如下输出 @
declare @s varchar(100),
set @s='aaaa,bbbb,cccc'
declare @first varchar(100),
declare @second varchar(100),
declare @third varchar(100)
现在我需要将这些字符串拆分为三个变量,其中包含如下值
@first=aaaa
@second=bbbb
@third=cccc
aaaa
bbbb
cccc
如果我使用split函数,那么我得到如下输出
@first=aaaa
@second=bbbb
@third=cccc
aaaa
bbbb
cccc
有没有更好的方法可以达到这个结果?任何帮助都将不胜感激
我希望这个结果成为一个变量,因为我需要它进行进一步的处理
谢谢假设您的输入字符串始终遵循该格式,这里有一个快速而肮脏的破解
DECLARE @s VARCHAR(100)
SET @s = 'aaaa,bbbb,cccc'
DECLARE @first VARCHAR(100)
DECLARE @second VARCHAR(100)
DECLARE @third VARCHAR(100)
SET @s = '<row>' + REPLACE(@s, ',', '</row><row>') + '</row>'
SELECT @first = CONVERT(XML, @s).value('(/row)[1]', 'varchar(100)')
, @second = CONVERT(XML, @s).value('(/row)[2]', 'varchar(100)')
, @third = CONVERT(XML, @s).value('(/row)[3]', 'varchar(100)')
SELECT @first
, @second
, @third
DECLARE@s VARCHAR(100)
SET@s='aaaa、bbbb、cccc'
声明@first VARCHAR(100)
声明@second VARCHAR(100)
声明@third VARCHAR(100)
设置@s=''+替换(@s','','')+''
选择@first=CONVERT(XML,@s).value(“(/row)[1]”,以及“varchar(100)”)
,@second=CONVERT(XML,@s).value(“(/row)[2]”,“/varchar(100)”)
,@third=CONVERT(XML,@s).value(“(/row)[3]”,“/varchar(100)”)
选择@first
秒
第三
这里有一个快速而肮脏的破解,假设您的输入字符串始终遵循该格式
DECLARE @s VARCHAR(100)
SET @s = 'aaaa,bbbb,cccc'
DECLARE @first VARCHAR(100)
DECLARE @second VARCHAR(100)
DECLARE @third VARCHAR(100)
SET @s = '<row>' + REPLACE(@s, ',', '</row><row>') + '</row>'
SELECT @first = CONVERT(XML, @s).value('(/row)[1]', 'varchar(100)')
, @second = CONVERT(XML, @s).value('(/row)[2]', 'varchar(100)')
, @third = CONVERT(XML, @s).value('(/row)[3]', 'varchar(100)')
SELECT @first
, @second
, @third
DECLARE@s VARCHAR(100)
SET@s='aaaa、bbbb、cccc'
声明@first VARCHAR(100)
声明@second VARCHAR(100)
声明@third VARCHAR(100)
设置@s=''+替换(@s','','')+''
选择@first=CONVERT(XML,@s).value(“(/row)[1]”,以及“varchar(100)”)
,@second=CONVERT(XML,@s).value(“(/row)[2]”,“/varchar(100)”)
,@third=CONVERT(XML,@s).value(“(/row)[3]”,“/varchar(100)”)
选择@first
秒
第三
如果您正在使用的拆分函数返回表中的三个值,一个选项可能是使用该输出插入具有整数标识的表变量,然后选择哪个变量与哪个标识值配对:
DECLARE @first VARCHAR(100)
DECLARE @second VARCHAR(100)
DECLARE @third VARCHAR(100)
declare @split_output table (block varchar(100) )
declare @split_identity table (in_order int identity(1,1), block varchar(100))
/* recreate output of split fn */
insert into @split_output
select 'aaaa'
union
select 'bbbb'
union
select 'cccc'
select * from @split_output
/* push split output into table with identity column */
insert into @split_identity (block)
select block from @split_output
select * from @split_identity
/* Use identity value to pick which row of the table goes with which variable */
set @first = (select block from @split_identity where in_order = 1)
set @second = (select block from @split_identity where in_order = 2)
set @third = (select block from @split_identity where in_order = 3)
select @first, @second, @third
如果您正在使用的split函数返回表中的三个值,一个选项可能是使用该输出插入具有整数标识的表变量,然后选择具有哪个标识值的变量对:
DECLARE @first VARCHAR(100)
DECLARE @second VARCHAR(100)
DECLARE @third VARCHAR(100)
declare @split_output table (block varchar(100) )
declare @split_identity table (in_order int identity(1,1), block varchar(100))
/* recreate output of split fn */
insert into @split_output
select 'aaaa'
union
select 'bbbb'
union
select 'cccc'
select * from @split_output
/* push split output into table with identity column */
insert into @split_identity (block)
select block from @split_output
select * from @split_identity
/* Use identity value to pick which row of the table goes with which variable */
set @first = (select block from @split_identity where in_order = 1)
set @second = (select block from @split_identity where in_order = 2)
set @third = (select block from @split_identity where in_order = 3)
select @first, @second, @third
可能有帮助可能有帮助只要字符串不包含任何
&
或就可以正常工作只要字符串不包含任何&
或