如何撰写匹配多个标记值的查询?

时间:2018-02-21 19:42:05

标签: influxdb

我想知道最好的方法是组合一个匹配标签的多个值的WHERE子句。我的印象是我可以使用正则表达式解决这个问题,但我似乎碰壁了。我的查询中返回的数据太多了......

在我的情况下,我有几个带有'location_id'标签的测量值。

当我使用下面的where子句创建查询时,我得到的数据不正确。可能是我对如何使用正则表达式模式的误解或者可能是不可能的......

我的数据如下

time                 cpu  location_id
----                 ---- -----------
2017-11-27T07:00:00Z 159  2
2017-11-27T15:00:00Z 154  27
2017-11-27T23:00:00Z 117  7
2017-11-28T07:00:00Z 160  7
2017-11-28T15:00:00Z 167  27
2017-11-28T23:00:00Z 170  27

当我执行查询时,我只希望位置返回值为“7”。 但是当我使用如下所示的查询时,也会返回来自location_id 27的数据......

SELECT * FROM“measurement”WHERE location_id =〜/ 7 /;

我的目标是我想表明location_id应该在值列表中。正则表达式甚至可以实现这一点吗?或者我应该使用AND子句吗?

SELECT * FROM“measurement”WHERE location_id =〜/ 7 | 2 | 104 | 45 /;

1 个答案:

答案 0 :(得分:1)

这可以使用正则表达式(尽管只有标签/字段是字符串)。首先,请回想一下,正则表达式/7/匹配输入文本中的字符7 任何地方。因此“7”和“27”都匹配。

要限制匹配以覆盖整个输入文本,请将其包含在文本开头^和文本结尾$标记中。例如,正则表达式/^7$/只匹配 字符串“7”而不是其他内容。

要匹配多个完整字符串,请使用正则表达式或运算符|。但请记住,它的运算符优先级低于组合,这意味着我们必须将子表达式括在括号中。例如,/^(7|2|104|45)$/将匹配“7”,“2”,“104”或“45”。

有关详细信息,请参阅golang regex syntax文档。