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

MS SQL Server中单个字段如何同时使用split、cast、case when处理数据

SQL Server 实现方案

实现逻辑如下:

  • 用PATINDEX('%[^0-9]%', 目标列名)定位字符串中第一个非数字字符的位置,以此拆分数字部分和后缀部分
  • 数字部分转成decimal类型,后缀部分通过CASE映射对应附加值,两者相加得到最终结果

完整查询代码

假设你的表名为YourTable,待处理的varchar列名为CodeVal,可直接使用以下查询:

SELECT 
    CodeVal AS 原始值,
    -- 提取数字部分并转decimal类型
    CAST(
        LEFT(CodeVal, CASE WHEN PATINDEX('%[^0-9]%', CodeVal) = 0 
                           THEN LEN(CodeVal) 
                           ELSE PATINDEX('%[^0-9]%', CodeVal) - 1 
                      END) AS DECIMAL(18,2)
    ) 
    +
    -- 映射后缀对应的附加值,无后缀则加0
    CASE 
        WHEN PATINDEX('%[^0-9]%', CodeVal) = 0 THEN 0
        WHEN SUBSTRING(CodeVal, PATINDEX('%[^0-9]%', CodeVal), 1) = 'A' THEN 0.25
        WHEN SUBSTRING(CodeVal, PATINDEX('%[^0-9]%', CodeVal), 1) = 'H' THEN 0.5
        WHEN SUBSTRING(CodeVal, PATINDEX('%[^0-9]%', CodeVal), 1) = 'T' THEN 0.75
        ELSE 0 -- 可根据业务需求调整未知后缀的处理逻辑
    END AS 转换后结果
FROM YourTable

运行效果对应你的示例输入:

  • 原始值2A → 转换后结果2.25
  • 原始值10H → 转换后结果10.5
  • 原始值4 → 转换后结果4.00
  • 原始值6T → 转换后结果6.75

注意事项

如果你的字段存在前后空格,可先对CodeVal套一层LTRIM(RTRIM(CodeVal))做预处理,避免空格影响非数字字符的定位逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:36:03