t-sql在两个已知字符串之间提取字符串

hl0ma9xz  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(404)

我有以下文字:
“原始-----奶牛跳过月球-----20200723--新-----奶牛跳过太阳---”
我正在尝试编写一个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 ----- . 请帮帮我!

euoag5mw

euoag5mw1#

CHARINDEX 有第三个可选参数,这是开始。修改您的查询如下开始寻找---在第一次出现之后。

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

一把快速的小提琴来演示。

smdnsysy

smdnsysy2#

你可以相信 Original ----- 是一个固定数量的字符和硬代码,它的值进入您的代码。那么要么用 where 子句或a case 表达式只应用于以 Original ----- ```
select 'Original ----- '+substring(col,16,charindex( '-----',col, 16)-11)
from t
where col like 'Original -----%';

相关问题