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

SQL查询:如何提取字符串中首个字母前的子串?

提取字符串首个字母前的数字部分解决方案

你之前用STUFF的语句逻辑搞反了——它是把前面的数字删掉,所以得到的是字母及后面的内容。换用LEFT结合PATINDEX就能实现需求:

基础版SQL

SELECT LEFT(column1, PATINDEX('%[^0-9]%', column1) - 1) AS extracted_numbers
FROM your_table;

逻辑说明

  • PATINDEX('%[^0-9]%', column1):定位字符串中第一个非数字字符的位置。比如12345BC01里第一个非数字是B,位置是6。
  • 用这个位置减1,得到前面数字部分的长度(6-1=5),再通过LEFT截取前N位,就拿到了首个字母前的数字。

兼容全数字场景的版本

如果column1里可能存在全数字的字符串(比如123456),上面的语句会返回空,这时候可以调整为:

SELECT LEFT(column1, ISNULL(NULLIF(PATINDEX('%[^0-9]%', column1), 0) - 1, LEN(column1))) AS extracted_numbers
FROM your_table;

当字符串全是数字时,PATINDEX返回0,NULLIF把0转成NULL,ISNULL就会取字符串的总长度LEN(column1),最终返回整个数字字符串。

验证结果

  • 输入12345BC01 → 输出12345
  • 输入67890DE05 → 输出67890

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:35:25