MySQL函数执行报错,解答

MySql 码拜 8年前 (2016-02-14) 1349次浏览
执行如下语句时报错
SELECT fun_split_version(“03.02”)
报错信息如下:
错误代码: 1366
Incorrect decimal value: “” for column “” at row -1
很神奇的一点就是,在多个服务器上的数据库(数据库版本都是5.5.20)同样执行时,只有一个报错,特纠结
函数如下:
DELIMITER $$
USE `autelproweb`$$
DROP FUNCTION IF EXISTS `fun_split_version`$$
CREATE DEFINER=`root`@`%` FUNCTION `fun_split_version`(softVer VARCHAR(50)/*版本号*/) RETURNS DECIMAL(20,0)
BEGIN
DECLARE returnVer DECIMAL(20, 0);
DECLARE v_1 DECIMAL(5);
DECLARE v_2 DECIMAL(5);
DECLARE v_3 DECIMAL(5);
DECLARE wz1begin INT; DECLARE wz1 INT;DECLARE wz2 INT ;DECLARE wz3 INT;DECLARE wz4 INT;
DECLARE softVer2 VARCHAR(50);
SET wz1begin = INSTR(softVer,”v”);   # 取V所在的字符 一般为1
SET wz1=INSTR(softVer,”.”);          # 取第一个点所在的位置
SET wz2=LOCATE(“.”, softVer, wz1+1); # 取第二个点所在的位置
IF wz2<1 THEN
SET wz2=CHAR_LENGTH(softVer)+1; # 不存在最后一个点则取最后一位+1为最后一个点
END IF;

SET v_1=CONVERT(SUBSTRING(softVer,wz1begin+1,wz1-1-wz1begin), DECIMAL(5,0));
SET v_2=CONVERT(SUBSTRING(softVer,wz1+1,wz2-wz1-1), DECIMAL(5,0));
SET v_3=CONVERT(SUBSTRING(softVer,wz2+1,CHAR_LENGTH(softVer)-wz2), DECIMAL(5,0));
SET returnVer=v_1*10000000000+v_2*100000+v_3;
RETURN returnVer;
END$$
DELIMITER ;

解决方案

10

LZ你好
你的代码里面有CONVERT,然后看你这报错Incorrect decimal value: “” for column “” at row -1,
应该就是类型转换convert出错了
建议LZ参考下面这篇文档
http://www.xuebuyuan.com/1818893.html

5

好好检查检查,可能报错的那台存在仔细错误。

5

跪求LZ结贴给分

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MySQL函数执行报错,解答
喜欢 (0)
[1034331897@qq.com]
分享 (0)