我有一个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中执行此操作?
答案 0 :(得分:2)
如果格式没有改变,这意味着您可以预期other_tags
字段类似于%"ref"=>"A 73","width"=>"7"%
,那么您可以使用instr
和substr
(请注意,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 公路='高速公路'