MySQL存储功能case语句

问题描述 投票:0回答:1

我建立一个存储函数从浮返回显著数字..如sfround(4.867,2)将返回4.8,sfround(1345,2)将返回1300

示例代码是

delimiter //

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
CASE n
WHEN 0 THEN RETURN 0;
ELSE
BEGIN
RETURN ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
END;
END CASE;
END//

delimiter ;

(我学到的缩进导致MySQL的有问题)

我抛出一个错误

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END;
END CASE;
END' at line 8

这是我第一次写这样的野兽,而且不知道从哪里开始..

mysql stored-functions
1个回答
1
投票

可以使用获得的SQL CASE作为一个单一的表达,它返回一个值。它不是使用像程序语言IFswitch/case(虽然你可以do that too)。更实用的风格。所以你可能需要的是:

delimiter //

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
  RETURN CASE n
    WHEN 0 THEN 0
    ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
  END;
END//

delimiter ;

请注意,对于单语句过程或函数,你不需要改变分隔符。它也可能只是

CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
  RETURN CASE n
    WHEN 0 THEN 0
    ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
  END;

另外请注意,我只解决了语法错误。不是所使用的算法。

© www.soinside.com 2019 - 2024. All rights reserved.