0

我有一些代码必须再次编写才能准备好生产。代码很乱,我有几行表示 sql 查询,但我无法解析确切的语句。

qs = 'DEVICENAME1|DEVICENAME2|DEVICENAME3'

qstring='SELECT "lat", "lon", "device", "location" FROM "locations" WHERE ("device" =~ /^('+qs+')/) AND time > now()-60h'

qstring='SELECT "device", "lat" FROM "locations" WHERE ("location"=~ /^'+loc+'$/) AND time > now()-60h'

如果有人能为我解决 sql 查询语句,我将不胜感激。需要明确的是,我对这些部分感兴趣: ("device" =~ /^('+qs+')/) ("location"=~ /^'+loc+'$/)

4

2 回答 2

1

从概念上讲,"device" =~ /^('+qs+')/意味着:检查以qs(开头的设备是否^表示字符串的开头),并"location"=~ /^'+loc+'$/ 检查位置是否等于loc($是字符串的结尾)。

因此,几乎在任何数据库中,这些条件都可以在不使用正则表达式的情况下重写:

"device" like ' + qs+ '%  -- influxdb does not support like
"location" = ' + loc + '

旁注:为了安全和效率,您应该在任何地方使用准备好的语句和参数化查询。由于您正在重写遗留代码,因此现在是这样做的好地方。

于 2019-12-08T09:37:12.883 回答
0

完整的解释可以在文档中找到: https: //docs.influxdata.com/influxdb/v1.2/query_language/data_exploration/#syntax-15 Influxdb 支持 Golang 的正则表达式语法。

于 2019-12-09T07:30:20.333 回答