如何让MySQL/MariaDB用户定义的变量在grafana中工作



使用MariaDB 5.5(我们的星号cdr数据库(,并试图根据数据库中的现有数据按日期构建时间序列,但希望加入所有日期的列,以计算没有数据的天数。以下查询(简化(在MySQL Workbench中可以获得过去180天内的所有日期列表,但在grafana中我遇到了语法错误。

SET @i = -1;
SELECT DATE(DATE_ADD(DATE_ADD(CURRENT_DATE(), INTERVAL -180 DAY), INTERVAL @i:=@i+1 DAY)) AS date
FROM queuestats
HAVING 
@i < DATEDIFF(CURRENT_DATE(), DATE_ADD(CURRENT_DATE(), INTERVAL -180 DAY))
;

我得到的错误如下:

错误1064:您的SQL语法有错误;在第3行的SELECT DATE(DATE_ADD(CURRENT_DATE((,INTERVAL-180 DAY(,INTERVAL@i:=@附近,查看与MariaDB服务器版本相对应的手册,以获得要使用的正确语法

如果我只是从查询中删除第一行,那么"SET"关键字似乎有问题,因为我没有得到错误,但也没有返回数据。我已经针对这个MariaDB和一个单独的MySQL数据库测试了这种语法,同样的事情也发生了。为了进一步简化,即使使用以下查询,我也会得到相同的错误:

SET @i = -1;
SELECT CURRENT_DATE() AS time;

有人知道为什么grafana不喜欢SET关键字吗?或者如何在不使用变量的情况下获得两个日期之间的日期列表?

提前谢谢。

由于安全原因(主要是SQL注入(,默认情况下MariaDB(以及MySQL(不接受用分号分隔的多个语句,除非您明确启用此选项(在C-API中,您可以通过设置CLIENT_MULTI_STATEMENTS标志来实现这一点,在PHP/mysqli中有一个单独的API调用mysqli_multi_query()(-但是我不知道Grafana是否有支持多个语句的选项声明。

最新更新