You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何提取字符串中第一个与第二个'-'分隔符间的子串

问题背景

表中某字符串类型字段以-作为分隔符存储多段内容,需要提取字段中第一个-和第二个-之间的子串,样例如下:

  • 源数据:ABC-DEF-FG,预期输出:DEF
  • 源数据:ABCD-JAFF-UIOU-TYU,预期输出:JAFF
原有写法问题

你之前尝试的三个语句存在两类问题:

  • 语法问题:SELECT *后直接拼接字段属于语法错误,*代表查询所有字段,和自定义提取字段不能直接无逗号拼接
  • 逻辑问题:SUBSTRING函数的第三个参数是需要截取的字符长度,不是截取的结束位置下标。你之前的写法要么直接传了字段总长度导致截取范围溢出,要么直接传第二个-的位置作为长度,没有减去起始位置的偏移量,导致截取结果长度错误。
正确实现语句

核心计算逻辑:

  1. 定位第一个-的下标,加1得到截取起始位置
  2. 从第一个-的下一位开始向后查找,定位第二个-的下标
  3. 用第二个-的下标减去第一个-的下标再减1,得到两个分隔符之间的子串长度

对应SQL语句:

SELECT
    SUBSTRING(
        your_column,
        CHARINDEX('-', your_column) + 1,
        CHARINDEX('-', your_column, CHARINDEX('-', your_column) + 1) - CHARINDEX('-', your_column) - 1
    ) AS target_value
FROM your_table

兼容提示:如果表中存在不足两个-的异常格式数据,上述语句会返回异常结果,建议提前过滤不符合格式的数据,或通过CASE WHEN判断分隔符数量后再做截取。

内容的提问来源于stack exchange,提问作者user09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:27:19