我有一种方案可以从定界字符串中选择单个值。
示例:
declare @Test varchar(100) = 'ABC|DEF|GHI'
由于数据库为SQL Server 2008版本,因此无法使用拆分功能。
寻找最佳的方式来分别分割和选择每个值。
答案 0 :(得分:1)
您可以使用CharIndex()来查找分隔符,然后使用SubString()在它们之间进行抓取:
Declare @Test varchar(100) = 'ABC|DEF|GHI'
Declare @d1 Int = CharIndex('|',@Test,1)
Declare @d2 Int = CharIndex('|',@Test,@d1+1)
Select
Substring(@Test,1,@d1-1) As f1,
Substring(@Test,@d1+1,@d2-@d1-1) As f2,
Substring(@Test,@d2+1,len(@Test)-@d2) As f3
结果:
f1 f2 f3
ABC DEF GHI
答案 1 :(得分:0)
您可以在SQL Server中创建自己的自定义函数以拆分字符串。您可以为此使用以下功能...
Create FUNCTION SplitString(@str VARCHAR(8000), @delimiter Varchar(1))
RETURNS @Temp Table ( item varchar(100))
as Begin
Declare @i as int=0
Declare @j as int=0
Set @j = (Len(@str) - len(REPLACE(@str,@delimiter,'')))
While @i < = @j
Begin
if @i < @j
Begin
Insert into @Temp
Values(SUBSTRING(@str,1,Charindex(@delimiter,@str,1)-1))
set @str = right(@str,(len(@str)- Charindex(@delimiter,@str,1)))
End
Else
Begin
Insert into @Temp Values(@str)
End
Set @i = @i + 1
End
return;
End
go
select * from dbo.SplitString('ABC|DEF|GHI', '|')
答案 2 :(得分:-1)
这个评论太长了。最好的方法是不使用定界值。相反,您可以使用表变量:
declare @Test table (val varchar(100));
insert into @Test(val)
values ('ABC', 'DEF', 'GHI');
Voila。没问题。