2016-10-19 17 views
1

私はSpatialiteデータベースを持っており、このデータベースにOSMデータをインポートしました。次のクエリでは は、私はすべての高速道路を取得:ドイツでは、すべてのアウトバーンは、(73のような)数字が続く、Aから始まるのでSQLiteは列内のテキストから文字列を抽出します

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

私は、ここにGLOB '*A [0-9]*'を使用しています。あなたがよく見る場合

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

一部"ref"=>"A 73"があります:

は、高速道路の一部に関する情報をother_tagsと呼ばれる列があります。

高速道路の名前としてA 73を抽出します。

どのようにsqliteでこれを行うことができますか?以下の条件で

答えて

0

チェック... 1)は、 "%" のようにother_tags - 3文字目からサブストリング、2 - A. 2)、ABS(SUBSTR(other_tags、3,2))<> 0.0で始まります文字は数字です。 3)の長さ(other_tags)= other_tagsの4 --lengthだからここ= 4

あるクエリはどうあるべきか。..

選択*ラインからここで、 "%" AND 腹筋などのother_tags (SUBSTR(other_tags、3,2))<> 0.0と長さ(other_tags)= 4と 高速道路あなたがother_tagsことを期待することができることを意味= '高速道路'

1

形式が変更されない場合は、フィールドが%"ref"=>"A 73","width"=>"7"%のようなものであれば、0を使用できますと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 
となり
関連する問題