我的问题说明了一切。我有一个mysql存储函数,返回类型为decimal 12,2。
全部代码如下:
BEGIN
-- The only edit is ony line number 9, 32 and 33
DECLARE ctrNumber VARCHAR(50);
DECLARE finNumber VARCHAR(50) DEFAULT '';
DECLARE sChar VARCHAR(1); -- be aware varchar length is 1
DECLARE inti INTEGER DEFAULT 1;
SET @in_string = '.abc12';
IF LENGTH(@in_string) > 0 THEN
-- Loops from . to 1 (.abc1)
WHILE(inti <= LENGTH(@in_string)) DO
SET sChar = SUBSTRING(@in_string, inti, 1);
-- Find if it contains the following array
SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9,.');
-- If returns true or 1 or 2 or positive number it means it contains
IF ctrNumber > 0 THEN
SET finNumber = CONCAT(finNumber, sChar);
END IF;
SET inti = inti + 1;
END WHILE;
-- end of loop from . to 1
RETURN CAST(finNumber AS DECIMAL(12,2)) AS final;
ELSE
RETURN 0;
END IF;
END
错误发生在: RETURN CAST(finNumber AS DECIMAL(12,2)) AS final;
芬兰号是 ".12"
我把它从字符串转换成十进制。
当我在存储过程中使用 SELECT CAST(finNumber AS DECIMAL(12,2)) AS final;
很好用。
您可以用decimal 12,2的返回类型复制我的整个代码,并将其粘贴到存储函数/过程中。
我在mysql和mariadb中都试过,但看起来不是这样。
这是错误:
以下查询失败:“create function ExtractNumber
()返回decimal(10,2)not deterministic no sql security definer begin——唯一的编辑是ony行号9、32和33 declare ctrnumber varchar(50);声明finnumber varchar(50)默认值“”;声明schar varchar(1);--注意varchar length是1,declare inti integer default是1;设置@in_string='.12';如果长度(@in_string)>0,则--从循环。设置为1(.1),而(inti<=length(@in_string))则设置schar=substring(@in_string,inti,1);--find如果它包含以下数组集ctrnumber=find_in_set(schar,'0,1,2,3,4,5,6,7,8,9,.');--如果返回true或1或2或正数,则表示它包含ctrnumber>0,然后设置finnumber=concat(finnumber,schar);结束if;设置inti=inti+1;结束时;——来自的循环结束。to 1—原始代码:remove cast和unsigned—unsigned删除所有特殊字符或字母—因为cast将数字转换为int或unsigned—返回cast(finnumber为unsigned)作为final;返回cast(finnumber作为十进制(12,2))作为final;否则返回0;结束if;“结束”
mysql说:#1064-你的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以获得使用near'作为final的正确语法;否则返回0;结束if;在第33行结束
暂无答案!
目前还没有任何答案,快来回答吧!