文本字符串split \ cut

时间:2018-04-10 18:22:22

标签: sql sql-server

| 我有很多字符串需要根据一个基本规则进行剪切\分割 - 在第一个";"之间进行分割。到第二个";"而不是粘贴在新栏目下。

例如,我的一行数据是:

 Y 4+2 A SAMPLES; Res 50Xp3 TP; HRI ; Bin n/a; Skew: RS; Source: Y805 [100] (Qty 100);

从这一行我应该检索:" Res 50Xp3 TP"

我认为我尝试了所有拆分选项但没有成功我也尝试使用PATINDEX \ CHARINDEX并且它没有帮助。

谢谢,

2 个答案:

答案 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