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

如何在SQL Server中提取BMUID字段'5'与'-'之间的子串?

解决BMUID字符串提取问题

嘿,我来帮你搞定这个字符串提取的需求!你的思路方向是对的,但问题出在SUBSTRING函数的第三个参数上——它需要的是截取的长度,而不是结束位置的索引,这就是你之前语句得不到正确结果的原因。

正确的实现语句

先给你直接能用的正确SQL:

SELECT SUBSTRING(
    BMUID,
    CHARINDEX('5', BMUID) + 1,
    CHARINDEX('-', BMUID) - (CHARINDEX('5', BMUID) + 1)
) AS ExtractedPart
FROM AreaMaster;

逐部分解释

咱们拆解一下这个语句的逻辑,对应你的例子来看:

  1. 确定起始位置:CHARINDEX('5', BMUID) + 1
    比如AU15BA-001里,CHARINDEX('5')返回3('5'在第3位),加1后得到起始位置4,也就是要提取的内容的第一个字符位置。
  2. 计算截取长度:CHARINDEX('-', BMUID) - (CHARINDEX('5', BMUID) + 1)
    还是用AU15BA-001举例,CHARINDEX('-')返回6,减去起始位置4,得到长度2——刚好是我们要提取的BA的长度。

更严谨的版本(处理特殊情况)

如果你的BMUID可能存在5之前就有-的情况,咱们可以指定从5的位置之后找第一个-,这样结果会更准确:

SELECT SUBSTRING(
    BMUID,
    CHARINDEX('5', BMUID) + 1,
    CHARINDEX('-', BMUID, CHARINDEX('5', BMUID)) - (CHARINDEX('5', BMUID) + 1)
) AS ExtractedPart
FROM AreaMaster;

用你的测试值验证一下:

  • AU15BA-001 → 提取BA
  • AU15BLA-03 → 提取BLA
  • AU15B-02 → 提取B

完全符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:28