我想知道最好的方法是组合一个匹配标签的多个值的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 /;
答案 0 :(得分:1)
这可以使用正则表达式(尽管只有标签/字段是字符串)。首先,请回想一下,正则表达式/7/
匹配输入文本中的字符7
任何地方。因此“7”和“27”都匹配。
要限制匹配以覆盖整个输入文本,请将其包含在文本开头^
和文本结尾$
标记中。例如,正则表达式/^7$/
只匹配 字符串“7”而不是其他内容。
要匹配多个完整字符串,请使用正则表达式或运算符|
。但请记住,它的运算符优先级低于组合,这意味着我们必须将子表达式括在括号中。例如,/^(7|2|104|45)$/
将匹配“7”,“2”,“104”或“45”。
有关详细信息,请参阅golang regex syntax文档。