我想从表类型列表中进行子串。
代码低于
@Description AS dbo.ListStringTableType
@Description有类似下面的数据列表
Test+Again
Today+Tomorrow
通过char'+'
查找子字符串Col1 Col2
----- -----
Test Again
Today Tomorrow
答案 0 :(得分:4)
SQL Server 2016具有split()
功能。但是,您可以改为:
select v.col1, v.col2
from t outer apply
(values (left(col, charindex('+', col) - 1),
stuff(col, 1, charindex('+', col), '')
)
) v(col1, col2);
答案 1 :(得分:3)
您可以使用charindex获取子字符串,如下所示。
declare @var varchar(20)='Test+Again'
select substring(@var,1,CHARINDEX('+',@var)-1) as col1
,substring(@var,CHARINDEX('+',@var)+1,len(@var)) as col2
@var变量应该是你的情况下的列。
答案 2 :(得分:0)
Select left(description,charindex('+', description)-1) as col1,
right(description,len(description)-charindex('+', description)) as col2
CharIndex将帮助找到我们提供的字符串的第一个位置。对于col1,我们需要在字符串' +'之前使用字符串,因此我们使用' left'功能在这里。 '左'将从开头到提到的长度获取字母数(通过charindex函数提取,将返回给定输入中精确字符串的位置)。 同样,对于col2,我们需要字符串后面的字符串' +'所以我们正在使用' right'功能在这里。 '右'将获取从最后一个字母到提到的长度的字母数(字符串的总长度 - 通过charindex函数提取的长度)。 有关,右,左功能的更多信息,请使用以下链接。