T-SQL提取两个已知字符串之间的字符串

时间:2020-07-23 18:49:19

标签: sql tsql substring ssms

我有以下文字:

“原始-----牛越过月亮----- 20200723 --NEW--牛越过太阳-----”

我正在尝试编写一个t-sql查询,该查询将提取字符串“ Original -----”和以下“ -----”之间的所有内容,因此我的结果将是:

“原始的-----牛跳上了月亮-----”

我试图写这样的东西:

declare @Text nvarchar(max) = 'Original ----- The cow jumped over the moon ----- 20200723 --NEW-- The cow jumped over the sun ----- '
select SUBSTRING(@Text, CHARINDEX('Original ----- ', @Text)
, CHARINDEX(' ----- ',@Text) - CHARINDEX('Original ----- ', @Text) + Len(' ----- '))

但是它只返回Original -----。 请帮忙!

2 个答案:

答案 0 :(得分:1)

CHARINDEX has a third, optional argument,这是开始。如下修改查询,以便在首次出现后开始寻找---。

select SUBSTRING(@Text, CHARINDEX('Original ----- ', @Text)
, CHARINDEX(' ----- ',@Text, CHARINDEX('Original ----- ', @Text) + len('Original ----- '))) + '-----';

A quick Fiddle to demonstrate

答案 1 :(得分:1)

您可以依靠这样的事实,Original ----- 是固定数量的字符,并且硬代码会影响您的代码。然后,使用where子句或case表达式仅将其应用于以Original ----- 开头的用户

select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';
相关问题