gpt4 book ai didi

mysql存储函数case语句

转载 作者:行者123 更新时间:2023-11-29 09:52:27 24 4
gpt4 key购买 nike

我正在构建一个存储函数来返回 float 的有效数字。例如 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

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

最佳答案

您可以使用 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;

另请注意,我仅解决语法错误。不是使用的算法。

关于mysql存储函数case语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54572078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com