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

MariaDB拼接INSERT语句报错‘Truncated incorrect DOUBLE value’求助

问题原因与解决方案

错误根源

报错的核心原因是MariaDB默认不把||当作字符串连接符,而是逻辑或(OR)运算符。当你用||拼接字符串时,数据库会尝试将这些字符串转换为整数/双精度数值进行逻辑运算,转换失败就会抛出"截断错误"。虽然最终SELECT结果看似正常,但底层类型转换过程中已经触发了警告/错误。

解决方案

方案1:改用CONCAT()函数拼接字符串(推荐)

直接使用MariaDB标准的字符串连接函数CONCAT()替代||,彻底避免类型转换问题。修正后的SQL如下:

SELECT CONCAT(
    'INSERT INTO MY_DB_RESOURCE_USAGE (REG_DT) VALUES (''',
    reg_dt,
    ''');'
)
FROM (
    SELECT CONVERT(DATE_FORMAT(NOW(), '%Y%m%d:%H'), CHAR) AS reg_dt
) AS tt;

你还可以简化不必要的嵌套子查询,进一步优化SQL:

SELECT CONCAT(
    'INSERT INTO MY_DB_RESOURCE_USAGE (REG_DT) VALUES (''',
    CONVERT(DATE_FORMAT(NOW(), '%Y%m%d:%H'), CHAR),
    ''');'
);

方案2:临时开启PIPES_AS_CONCAT模式

如果坚持使用||作为连接符,可以在执行SQL前临时开启会话级别的PIPES_AS_CONCAT模式,让MariaDB将||识别为字符串连接符:

SET sql_mode = 'PIPES_AS_CONCAT';
SELECT 'INSERT INTO MY_DB_RESOURCE_USAGE (REG_DT) VALUES ('''||reg_dt||''');'
FROM (
    SELECT CONVERT(DATE_FORMAT(NOW(), '%Y%m%d:%H'), CHAR) AS reg_dt
) AS tt;

注意:该设置仅对当前会话有效,不会影响全局配置;如果是批处理执行,需要确保这条SET语句和查询语句在同一个会话中运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:15