SQLite从

时间:2016-10-19 14:18:49

标签: regex string sqlite openstreetmap spatialite

我有一个Spatialite数据库,我已将OSM数据导入此数据库。 通过以下查询,我得到了所有高速公路:

SELECT * FROM lines 
    WHERE other_tags GLOB '*A [0-9]*'
    AND highway='motorway'

我在这里使用GLOB '*A [0-9]*',因为在德国,每个高速公路都以A开头,后跟一个数字(如A 73)。

有一个名为other_tags的栏目,其中包含有关高速公路部分的信息:

"bdouble"=>"yes","hazmat"=>"designated","lanes"=>"2","maxspeed"=>"none","oneway"=>"yes","ref"=>"A 73","width"=>"7"

如果你仔细观察,那就是"ref"=>"A 73"部分。

我想提取A 73作为高速公路的名称。

如何在sqlite中执行此操作?

2 个答案:

答案 0 :(得分:2)

如果格式没有改变,这意味着您可以预期other_tags字段类似于%"ref"=>"A 73","width"=>"7"%,那么您可以使用instrsubstr(请注意,8是"ref"=>")的长度:

SELECT substr(other_tags,
              instr(other_tags, '"ref"=>"') + 8,
              instr(other_tags, '","width"') - 8 - instr(other_tags, '"ref"=>"')) name
FROM lines 
WHERE other_tags GLOB '*A [0-9]*'
  AND highway='motorway'

结果将是

name
A 73

答案 1 :(得分:0)

检查以下条件.. 1)other_tags喜欢" A%" - 从A.开始 2)abs(substr(other_tags,3,2))<> 0.0 - 来自第3个字符的子串,两个字符是数字。 3)length(other_tags)= 4 - other_tags = 4的长度

以下是您的查询应该如何...

  

从other_tags中选择*,其中" A%"和   abs(substr(other_tags,3,2))<> 0.0 AND length(other_tags)= 4 AND   公路='高速公路'