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

SQL中移除字符串指定内容:提取u_manualdoc列的数字值

提取u_manualdoc列中的数字部分

嘿,这事儿好办!你要从u_manualdoc列里提取CGY DR#后面的数字,我给你分几种常见数据库的实现方法,按需选用就行~

核心思路

你的列值格式是固定的CGY DR# 数字,要么直接去掉固定前缀,要么用正则提取数字部分,两种方法各有优劣:

  • 固定前缀法:高效直接,适合格式完全统一的场景
  • 正则提取法:更灵活,能适配偶尔格式变化的情况

1. MySQL/MariaDB 实现

方法一:固定前缀截取

因为CGY DR# (注意末尾有空格)一共是8个字符,直接从第9位开始截取即可:

SELECT 
  u_manualdoc,
  SUBSTRING(u_manualdoc, 9) AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

方法二:正则提取数字

如果担心偶尔有格式变动,用正则匹配所有数字更稳妥:

SELECT 
  u_manualdoc,
  REGEXP_SUBSTR(u_manualdoc, '[0-9]+') AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

2. SQL Server 实现

方法一:固定前缀截取

同样利用固定前缀长度,用SUBSTRING截取:

SELECT 
  u_manualdoc,
  SUBSTRING(u_manualdoc, 9, LEN(u_manualdoc)) AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

方法二:定位数字起始位置

用PATINDEX找到第一个数字的位置,再截取:

SELECT 
  u_manualdoc,
  SUBSTRING(u_manualdoc, PATINDEX('%[0-9]%', u_manualdoc), LEN(u_manualdoc)) AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

3. Oracle 实现

方法一:定位最后一个空格截取

找到最后一个空格的位置,截取后面的内容:

SELECT 
  u_manualdoc,
  SUBSTR(u_manualdoc, INSTR(u_manualdoc, ' ', -1) + 1) AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

方法二:正则提取数字

用正则匹配数字:

SELECT 
  u_manualdoc,
  REGEXP_SUBSTR(u_manualdoc, '\d+') AS extracted_number,
  cardcode,
  cardname 
FROM ODLN;

小贴士:如果列中存在不符合CGY DR# 数字格式的记录,可以用CASE WHEN做判断,避免出现异常值哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:59:01