1

使用 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 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的 'SELECT DATE(DATE_ADD(DATE_ADD(CURRENT_DATE(), INTERVAL -180 DAY), INTERVAL @i:=@' 附近使用正确的语法

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

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

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

提前致谢。

4

1 回答 1

0

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

于 2020-04-11T17:34:01.117 回答