如何从输入字符串中提取子字符串
'{\lang1252 All rights reserved}'
即。通常情况下是
1){\ lettersdigits \ lettersdigits \ lettersdigits任何纯文本} 2){\ lettersdigits文本\ lettersdigits part2 \ lettersdigits任何纯文本}
预期结果如下: 1)任何纯文本 2)文本part2任何纯文本
命令启动\,然后是字母,然后是可选数字。 此外,如果命令没有从\开始,则它是文本,应该作为文本提取。
答案 0 :(得分:1)
你可以reverse
字符串,找到' \'的第一次出现的索引。使用charindex
并使用substring
查找所需的输出。
尝试以下。
declare @var varchar(100)='{\lettersdigits \letters123 \lettersdigit45 any plain text}'
select substring(col,patindex('% %', col), len(col)- patindex('% %', col))
from
(
select reverse(substring(reverse(@var),2,charindex('\',reverse(@var))-2)) col
) t
<强> DEMO 强>
修改(根据问题更新):
您可以创建以下代码的缩放器值函数,它将适合您。
declare @xml xml
declare @str as varchar(100)
declare @output varchar(max)
--SET @str='{\lettersdigits \lettersdigits \lettersdigits any plain text}'
SET @str='{\lettersdigits The text \lettersdigits the part2 \lettersdigits any plain text}'
select @xml = cast(('<X>'+replace(@str,'\' ,'</X><X>')+'</X>') as xml)
select @output= output from
(
select stuff(
(
select substring(col,patindex('% %', col), len(col)- patindex('% %', col)+1) from
(
select replace(replace(value,'}',''),'{','') col from
(
SELECT LTRIM(N.value('.', 'varchar(100)')) as value FROM @xml.nodes('X') as T(N)
) t1
) t2
for xml path('')),1,1,'') as [output]
) t
select @output
<强> DEMO 2 强>