| 我有很多字符串需要根据一个基本规则进行剪切\分割 - 在第一个";"之间进行分割。到第二个";"而不是粘贴在新栏目下。
例如,我的一行数据是:
Y 4+2 A SAMPLES; Res 50Xp3 TP; HRI ; Bin n/a; Skew: RS; Source: Y805 [100] (Qty 100);
从这一行我应该检索:" Res 50Xp3 TP"
我认为我尝试了所有拆分选项但没有成功我也尝试使用PATINDEX \ CHARINDEX并且它没有帮助。
谢谢,
答案 0 :(得分:2)
一个选项是使用一点XML
示例强>
Declare @YourTable table (ID int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'Y 4+2 A SAMPLES; Res 50Xp3 TP; HRI ; Bin n/a; Skew: RS; Source: Y805 [100] (Qty 100);')
Select ID
,NewValue = ltrim(rtrim(convert(xml,'<x>'+replace(SomeCol,';','</x><x>')+'</x>').value('/x[2]','varchar(100)')))
From @YourTable
<强>返回强>
ID NewValue
1 Res 50Xp3 TP
答案 1 :(得分:1)
我在脚本中使用CHARINDEX和SUBSTRING的组合完成了类似的操作
DECLARE @str VARCHAR(200) = 'Y 4+2 A SAMPLES; Res 50Xp3 TP; HRI ; Bin n/a; Skew: RS; Source: Y805 [100] (Qty 100)'
DECLARE @char VARCHAR(1) = ';'
SELECT
SUBSTRING(
LTRIM(SUBSTRING(@str,CHARINDEX(@char, @str)+1, LEN(@str)-CHARINDEX(@char, @str))),
0,
CHARINDEX(@char, LTRIM(SUBSTRING(@str,CHARINDEX(@char, @str)+1, LEN(@str)-CHARINDEX(@char, @str))))
)
输出
Res 50Xp3 TP
参考评论
SELECT
SUBSTRING(
LTRIM(SUBSTRING(v.description,CHARINDEX(';', v.description)+1, LEN(v.description)-CHARINDEX(';', v.description))),
0,
CHARINDEX(';', LTRIM(SUBSTRING(v.description,CHARINDEX(';', v.description)+1, LEN(v.description)-CHARINDEX(';', v.description))))
) AS 'YourText'
FROM vw_public_vpo AS v