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 -----
。
请帮忙!
CHARINDEX
has a third, optional argument,这是开始。按如下方式修改您的查询以开始查找 --- 在第一次出现后。
select SUBSTRING(@Text, CHARINDEX('Original ----- ', @Text)
, CHARINDEX(' ----- ',@Text, CHARINDEX('Original ----- ', @Text) + len('Original ----- '))) + '-----';
您可以相信 Original -----
是固定数量的字符,并且将其值硬编码到您的代码中。然后使用 where
子句或 case
表达式仅将其应用于以 Original -----
开头的那些
select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';
我有以下文字:
"原创-----牛跃过月亮----- 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 -----
。
请帮忙!
CHARINDEX
has a third, optional argument,这是开始。按如下方式修改您的查询以开始查找 --- 在第一次出现后。
select SUBSTRING(@Text, CHARINDEX('Original ----- ', @Text)
, CHARINDEX(' ----- ',@Text, CHARINDEX('Original ----- ', @Text) + len('Original ----- '))) + '-----';
您可以相信 Original -----
是固定数量的字符,并且将其值硬编码到您的代码中。然后使用 where
子句或 case
表达式仅将其应用于以 Original -----
select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';