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
相关产品推荐
相关产品推荐

