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

