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

如何从SQL字符串右侧首空格后提取数值,非数值返回NULL

解决SQL提取右侧空格后数值并过滤非数值内容的问题

问题描述

需要从列x生成新列y,目标是提取字符串右侧第一个空格后的数值,若该位置无数值则返回NULL。原查询仅截取了空格后的内容,未区分数值与非数值:

SELECT x, SUBSTR(x, INSTR(x,' ', -1) + 1) AS y
FROM  <table_name>;

解决方案

根据不同SQL方言,提供两种常用实现方式:

方法1:使用正则匹配(适配MySQL、PostgreSQL等支持正则的数据库)

通过CASE语句结合正则表达式判断截取内容是否为数值(支持整数和小数),符合条件则返回,否则返回NULL:

SELECT 
    x,
    CASE
        WHEN SUBSTR(x, INSTR(x,' ', -1) + 1) REGEXP '^[0-9]+(\.[0-9]+)?$'
        THEN SUBSTR(x, INSTR(x,' ', -1) + 1)
        ELSE NULL
    END AS y
FROM <table_name>;

方法2:使用TRY_CAST函数(适配SQL Server、PostgreSQL 12+等支持的数据库)

利用TRY_CAST尝试将截取内容转换为数值类型,转换失败自动返回NULL,写法更简洁:

SELECT
    x,
    TRY_CAST(SUBSTR(x, INSTR(x,' ', -1) + 1) AS DECIMAL) AS y
FROM <table_name>;

说明

  • 原查询的问题在于仅完成了字符串截取,未对截取结果的数值属性做校验。
  • 正则表达式^[0-9]+(\.[0-9]+)?$可匹配整数(如123)和小数(如123.45),若仅需匹配整数,可简化为^[0-9]+$。
  • TRY_CAST函数会自动处理转换失败的场景,无需额外判断,推荐在支持的数据库中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:15:10