gpt4 book ai didi

mysql - MariaDB 用户定义的函数在需要小数时返回 int 或 null

转载 作者:行者123 更新时间:2023-11-29 00:10:59 27 4
gpt4 key购买 nike

我正在深入探索在 Slackware64 14.1 上运行的 MariaDB 5.5.35 版中的用户定义函数。

函数如下:

DELIMITER $$
CREATE FUNCTION avg_month(st_id tinyint, pol_id tinyint, month_sel tinyint, year_sel smallint)
-> RETURNS DECIMAL(7.4)
-> DETERMINISTIC
-> BEGIN
-> DECLARE avrg decimal;
-> SELECT avg(value) into avrg FROM all_data_obs
-> WHERE month(start_time)=month_sel and year(start_time)=year_sel and station_id=st_id and polutant_id=pol_id;
-> RETURN avrg;
-> END $$

数据库说

Query OK, 0 rows affected (0.03 sec)

但是当我尝试像这样使用它时

select avg_month(2,5,5,2014);

它返回 null 或 1 或 0。它不应该是 1.0 或 0.0 吗?和如果我尝试像这样使用它

select avg_month(16,5,5,2014) from all_data_obs;

数据库从不返回任何东西,我必须用 ctrl+c 停止查询

如果我只使用 select 语句,它工作正常。例如

 SELECT avg(value) as a FROM all_data_obs WHERE month(start_time)=5 and year(start_time)=2014 and station_id=16 and polutant_id=5;

返回 0.122427,但是

select avg_month(16,5,5,2014);

返回 0

我承认我是函数新手。我问了谷歌并阅读了几篇关于如何编写函数的文章,但找不到解决这个问题的方法。

欢迎任何想法。

最佳答案

您已经声明了您的函数 DETERMINISTICWhich means that:

A function is deterministic if it can produce only one result for a given list of parameters. If the result may be affected by stored data, server variables, random numbers or any value that is not explicitly passed, then the function is not deterministic.

由于您是从表中进行查询,因此不应将函数声明为确定性的。

关于mysql - MariaDB 用户定义的函数在需要小数时返回 int 或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25082940/

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