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

TSQL如何提取字段中特定字符右侧的纯数字内容

处理方案

以下按不同主流数据库提供实现代码,可直接替换到你的查询逻辑中:

SQL Server(适配你当前使用的CHARINDEX/SUBSTRING语法体系)

如果你的数据库版本为SQL Server 2017及以上,优先用以下两种方案:

  • 方案1(非数字仅出现在末尾时效率最高):
    通过PATINDEX定位第一个非数字字符的位置,直接截取数字段,末尾追加非数字字符避免全数字场景下匹配为空报错:
SELECT
  SUBSTRING(DatabaseField, 0, CHARINDEX('-', DatabaseField)) AS NewColumnA,
  SUBSTRING(
    SUBSTRING(DatabaseField, CHARINDEX('-', DatabaseField)+1, LEN(DatabaseField)),
    1,
    PATINDEX('%[^0-9]%', SUBSTRING(DatabaseField, CHARINDEX('-', DatabaseField)+1, LEN(DatabaseField)) + 'X') - 1
  ) AS NewColumnB
FROM 你的表名
  • 方案2(非数字可能出现在任意位置时适用):
    通过TRANSLATE批量替换所有大小写字母为空:
SELECT
  SUBSTRING(DatabaseField, 0, CHARINDEX('-', DatabaseField)) AS NewColumnA,
  TRIM(TRANSLATE(
    SUBSTRING(DatabaseField, CHARINDEX('-', DatabaseField)+1, LEN(DatabaseField)),
    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
    REPLICATE(' ', 52)
  )) AS NewColumnB
FROM 你的表名

其他主流数据库实现

MySQL(8.0及以上)

SELECT
  SUBSTRING_INDEX(DatabaseField, '-', 1) AS NewColumnA,
  REGEXP_REPLACE(SUBSTRING_INDEX(DatabaseField, '-', -1), '[^0-9]', '') AS NewColumnB
FROM 你的表名

PostgreSQL

SELECT
  SPLIT_PART(DatabaseField, '-', 1) AS NewColumnA,
  REGEXP_REPLACE(SPLIT_PART(DatabaseField, '-', 2), '[^0-9]', '', 'g') AS NewColumnB
FROM 你的表名

Oracle

SELECT
  SUBSTR(DatabaseField, 1, INSTR(DatabaseField, '-') - 1) AS NewColumnA,
  REGEXP_REPLACE(SUBSTR(DatabaseField, INSTR(DatabaseField, '-') + 1), '[^0-9]') AS NewColumnB
FROM 你的表名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:03