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

MySQL中如何区分字符串字段的数值/非数值执行算术运算?

解决字符串字段数值判断与算术运算问题

我的表中有一个string类型的dealer_price字段,数据如下:

| dealer_price       |
| ------------------ |
| 1000.00            |
| 5000.00            |
| Contact for pricing|
| 10000.00           |

执行查询 select (dealer_price + 10) AS cust_price FROM my_table 时,非数值字符串会被当作0参与运算,我需要实现:如果字段值是数值则执行算术运算,否则直接显示原内容,期望输出:

| cust_price         |
| ------------------ |
| 1010.00            |
| 5010.00            |
| Contact for pricing|
| 10010.00           |

分数据库实现方案

MySQL/MariaDB

通过正则匹配判断数值格式,结合IF函数分支处理:

SELECT 
    IF(dealer_price REGEXP '^[0-9]+(\.[0-9]+)?$', 
       CAST(dealer_price AS DECIMAL(10,2)) + 10, 
       dealer_price
    ) AS cust_price
FROM my_table;

正则表达式^[0-9]+(\.[0-9]+)?$用于匹配整数或小数格式的数值,符合条件则转成DECIMAL类型执行加法,否则返回原字符串。

PostgreSQL

利用TRY_CAST尝试转换数值,失败返回NULL,再通过COALESCE兜底返回原内容:

SELECT 
    COALESCE(
        CAST(TRY_CAST(dealer_price AS NUMERIC) + 10 AS TEXT), 
        dealer_price
    ) AS cust_price
FROM my_table;

TRY_CAST转换成功则执行加法后转回文本,失败时COALESCE会取第二个参数即原字符串。

SQL Server

使用TRY_CONVERT尝试转换,逻辑与PostgreSQL一致:

SELECT 
    COALESCE(
        CAST(TRY_CONVERT(DECIMAL(10,2), dealer_price) + 10 AS VARCHAR(50)), 
        dealer_price
    ) AS cust_price
FROM my_table;

TRY_CONVERT转换数值成功则运算后转成字符串,失败返回原字段内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:17:17