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

SQL如何处理varchar类型数量字段的多余小数点以统一数值格式

多小数点格式校正SQL实现

核心处理规则为:先统计字符串内小数点的总数量,若数量≥2则删除第一个出现的小数点,若数量≤1则直接返回原值,完全匹配需求场景。

MySQL 实现

基础兼容版(支持所有MySQL版本)

SELECT 
  CASE 
    -- 统计小数点数量是否≥2
    WHEN LENGTH(Qty) - LENGTH(REPLACE(Qty, '.', '')) >= 2 
    THEN CONCAT(
      -- 截取第一个小数点之前的内容
      SUBSTRING(Qty, 1, LOCATE('.', Qty) - 1),
      -- 截取第一个小数点之后的所有内容
      SUBSTRING(Qty, LOCATE('.', Qty) + 1)
    )
    ELSE Qty 
  END AS formatted_qty
FROM your_table;

正则简化版(支持MySQL 8.0及以上版本)

SELECT 
  CASE 
    WHEN LENGTH(Qty) - LENGTH(REPLACE(Qty, '.', '')) >= 2
    -- 仅替换第一个匹配到的小数点
    THEN REGEXP_REPLACE(Qty, '\\.', '', 1, 1)
    ELSE Qty
  END AS formatted_qty
FROM your_table;

SQL Server 实现

SELECT 
  CASE 
    WHEN LEN(Qty) - LEN(REPLACE(Qty, '.', '')) >= 2
    THEN CONCAT(
      SUBSTRING(Qty, 1, CHARINDEX('.', Qty) - 1),
      SUBSTRING(Qty, CHARINDEX('.', Qty) + 1, LEN(Qty))
    )
    ELSE Qty
  END AS formatted_qty
FROM your_table;

Oracle 实现

SELECT 
  CASE 
    WHEN LENGTH(Qty) - LENGTH(REPLACE(Qty, '.', '')) >= 2
    THEN SUBSTR(Qty, 1, INSTR(Qty, '.') - 1) || SUBSTR(Qty, INSTR(Qty, '.') + 1)
    ELSE Qty
  END AS formatted_qty
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:01