如何编写匹配多个标签值的查询?

问题描述 投票:0回答:2

我想知道最好的方法是编写一个匹配标签的多个值的 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 的数据......

从“测量”中选择*,其中location_id =~ /7/;

我的目标是我想指出 location_id 应该位于值列表中。这对于正则表达式来说是可能的吗?或者我应该使用 AND 子句?

从“测量”中选择*,其中location_id =~ /7|2|104|45/;

influxdb
2个回答
2
投票

这可以通过正则表达式实现(尽管仅适用于字符串标签/字段)。首先,回想一下正则表达式

/7/
与输入文本中的字符
7
anywhere 匹配。因此“7”和“27”都匹配。

要限制匹配覆盖整个输入文本,请将其包含在文本开始

^
和文本结束
$
标记中。例如,正则表达式
/^7$/
将仅匹配字符串“7”,而不匹配其他内容。 要匹配多个完整字符串,请使用正则表达式或运算符

|

。但请记住,它的运算符优先级低于组合,这意味着我们必须将子表达式括在括号中。例如,

/^(7|2|104|45)$/
将匹配“7”、“2”、“104”或“45”。

有关更多详细信息,请参阅

golang 正则表达式语法

文档。


0
投票

/^($变量$)$/

© www.soinside.com 2019 - 2024. All rights reserved.