我有以下文字:
“原始-----牛越过月亮----- 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 -----
。
请帮忙!
答案 0 :(得分:1)
CHARINDEX
has a third, optional argument,这是开始。如下修改查询,以便在首次出现后开始寻找---。
select SUBSTRING(@Text, CHARINDEX('Original ----- ', @Text)
, CHARINDEX(' ----- ',@Text, CHARINDEX('Original ----- ', @Text) + len('Original ----- '))) + '-----';
答案 1 :(得分:1)
您可以依靠这样的事实,Original -----
是固定数量的字符,并且硬代码会影响您的代码。然后,使用where
子句或case
表达式仅将其应用于以Original -----
开头的用户
select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';