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

如何将ASP中MSAccess SQL的CDbl与LEFT函数转换为MySQL

Access代码片段逻辑解释

这段代码的核心是把tblSU表的SUNum字段处理成双精度浮点数,具体逻辑如下:

  1. 先检查SUNum的值是否为纯数字:通过IsNumeric([tblSU]![SUNum])完成判断
  2. 根据检查结果分支处理:
    • 如果是纯数字,直接使用SUNum的原始值
    • 如果不是纯数字,就截取SUNum中第一个-左侧的内容:
      • InStr(1,[tblSU]![SUNum],'-')定位-在字符串里的起始位置(从第1位开始查找)
      • Left(..., 位置-1)提取-之前的所有字符
  3. 最后把上述处理结果转成双精度浮点数,通过CDbl()完成类型转换

举个实际例子:

  • 若SUNum是123.45,直接转成123.45
  • 若SUNum是678-ABC,截取678后转成678.0
转换为MySQL语法

将Access特有的函数替换为MySQL对应语法,最终SQL如下:

SELECT DISTINCT trelMapSU.Site, trelMapSU.MapNum, tlkpSUTyp.SUTyp,
        tblSU.SUNum, tlkpSUDesc.SUDesc, 
        CAST(
            IF(
                tblSU.SUNum REGEXP '^[0-9]+(\\.[0-9]+)?$',
                tblSU.SUNum,
                LEFT(tblSU.SUNum, LOCATE('-', tblSU.SUNum) - 1)
            ) AS DOUBLE
        )
FROM tlkpSUTyp
-- 注意:原Access SQL缺失表关联的JOIN语句,需要补充比如JOIN trelMapSU、tblSU等关联条件才能正常执行

关键函数替换说明:

  • IsNumeric() → 用正则REGEXP '^[0-9]+(\\.[0-9]+)?$'判断是否为数字(支持整数和小数)
  • IIf() → 替换为MySQL原生的IF()函数,语法逻辑一致
  • InStr() → 替换为LOCATE('-', tblSU.SUNum),参数顺序为「要查找的字符串」在前,「原字符串」在后
  • CDbl() → 用CAST(xxx AS DOUBLE)实现双精度浮点数转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:01:17