【问题标题】:T-SQL Extract string between two known stringsT-SQL 提取两个已知字符串之间的字符串
【发布时间】:2020-11-13 14:06:56
【问题描述】:

我有以下文字:

"原创-----牛跳过月亮----- 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 -----。 请帮忙!

【问题讨论】:

标签: sql tsql substring ssms


【解决方案1】:

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

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

A quick Fiddle to demonstrate.

【讨论】:

    【解决方案2】:

    您可以依赖 Original ----- 是固定数量的字符并将该值硬编码到您的代码中这一事实。然后使用where 子句或case 表达式仅将其应用于以Original ----- 开头的那些

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

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多