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

T-SQL Extract string between two known strings

我有以下文字:

"原创-----牛跃过月亮----- 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(' ----- '))

但它只是 returns Original -----。 请帮忙!

CHARINDEXhas a third, optional argument,这是开始。按如下方式修改您的查询以开始查找 --- 在第一次出现后。

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

A quick Fiddle to demonstrate.

您可以相信 Original ----- 是固定数量的字符,并且将其值硬编码到您的代码中。然后使用 where 子句或 case 表达式仅将其应用于以 Original -----

开头的那些
select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';