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

SQL如何提取字符串中前两个短横线之前的内容

问题原因

你之前使用的LEFT(COL,CHARINDEX('-',COL))只能定位到字符串中第一个短横线的位置,只能提取第一个短横线及之前的内容,自然无法得到包含前两段的预期结果。

各数据库实现方案

SQL Server / Azure SQL 写法

通过嵌套CHARINDEX定位第二个短横线的位置,若不存在第二个短横线则直接返回原字符串:

SELECT
  CASE
    -- 不存在第二个短横线直接返回原值
    WHEN CHARINDEX('-', COL, CHARINDEX('-', COL) + 1) = 0 THEN COL
    -- 存在则截取到第二个短横线前一位
    ELSE LEFT(COL, CHARINDEX('-', COL, CHARINDEX('-', COL) + 1) - 1)
  END AS target_str
FROM 你的表名

MySQL 写法

直接调用内置函数SUBSTRING_INDEX,指定按短横线分割,取前2段:

SELECT SUBSTRING_INDEX(COL, '-', 2) AS target_str FROM 你的表名

PostgreSQL 写法

用split_part分别取前两段再拼接:

SELECT split_part(COL, '-', 1) || '-' || split_part(COL, '-', 2) AS target_str FROM 你的表名

以上方案对所有示例输入都能匹配你给出的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:04