Sql 文本字符串拆分\剪切

Sql 文本字符串拆分\剪切,sql,sql-server,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,但没有任何帮助 谢谢,一个选项是使用

| 我有许多字符串需要根据一个基本规则进行剪切/拆分-在第一个“;“到第二个”;“之间拆分/剪切”,然后将其粘贴到新列下

例如,我的一行数据是:

 Y 4+2 A SAMPLES; Res 50Xp3 TP; HRI ; Bin n/a; Skew: RS; Source: Y805 [100] (Qty 100);
从这一行我应该检索到:“Res 50Xp3 TP”

我想我尝试了所有拆分选项,但没有成功。我还尝试了使用PATINDEX\CHARINDEX,但没有任何帮助


谢谢,

一个选项是使用一点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

一种选择是使用少量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

我在脚本中使用CHARINDEX和子字符串的组合完成了类似的操作

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

我在脚本中使用CHARINDEX和子字符串的组合完成了类似的操作

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

我喜欢!我每天都从你这样的人那里学到新东西,约翰@马修威尔(MatthewWeir)确实是SO最好的部分之一。:)我喜欢!我每天都从你这样的人那里学到新东西,约翰@马修威尔(MatthewWeir)确实是SO最好的部分之一。:)您好,我的数据存储在“vw_public_vpo.description”列,我需要在所有行上运行此选项,如何更新“DECLARE@str VARCHAR(200)='Y 4+2 A SAMPLES;Res 50Xp3 TP;HRI;Bin n/A;Skew:RS;Source”以使用我的列数据而不是特定文本。在查询中用w_public_vpo.description替换@str。还将char变量替换为“;”但是在你的查询中,因为这是静态的,所以你可以保留declare。你能告诉我declare应该是什么样子吗?因为在我改变它之后,它不能被执行。。我可能错过了一些东西。再次感谢!你能用一个简单的查询来更新你的问题吗?这样我们就知道了表和模式,然后我就可以修改它了。我刚刚看到我的查询中遗漏了一个字符,它现在工作得很好!!谢谢!!我没有用“;”更改“char变量”,这很重要?我真的不明白它的意思。嗨,我的数据存储在“vw_public_vpo.description”列,我需要在所有行上运行此选项,我如何更新“DECLARE@str VARCHAR(200)=”Y 4+2 A SAMPLES;res50xp3tp;人权倡议;垃圾箱不适用;倾斜:RS;来源“使用我的列数据而不是特定文本。在查询中用w_public_vpo.description替换@str。还将char变量替换为“;”但是在你的查询中,因为这是静态的,所以你可以保留declare。你能告诉我declare应该是什么样子吗?因为在我改变它之后,它不能被执行。。我可能错过了一些东西。再次感谢!你能用一个简单的查询来更新你的问题吗?这样我们就知道了表和模式,然后我就可以修改它了。我刚刚看到我的查询中遗漏了一个字符,它现在工作得很好!!谢谢!!我没有用“;”更改“char变量”,这很重要吗?我真的不明白它的意思。您好,您可以帮助我将此解决方案修改到数据末尾吗?在本例中,我希望看到最后一个”;“+前面的一个(全部在它们之间)。谢谢,您好,您可以帮助我将此解决方案修改到数据末尾?在本例中,我希望看到最后一个”;“+前面的那一个(都在他们之间)。谢谢,