2016-10-19 7 views
1

У меня есть база данных Spatialite, и я импортировал данные OSM в эту базу данных. При следующем запросе я получаю все автомобильные дороги:SQLite извлечь строку из текста в столбце

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

Я использую GLOB '*A [0-9]*' здесь, потому что в Германии каждый Autobahn начинается с А, за которым следует число (например, 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

Проверка с следующим условием .. 1) other_tags как "A%" - Начинайте с А. 2) абс (SUBSTR (other_tags, 3,2)) <> 0,0 - подстроки с 3-го символа, два знак - число. 3) длина (other_tags) = 4 --length из other_tags = 4

Так вот как ваш запрос должен быть ..

Select * из линий, где other_tags, как "A%" И абс (SUBSTR (other_tags, 3,2)) <> 0.0 и длина (other_tags) = 4 И шоссе = 'автомагистраль'

1

Если формат не изменится, то это означает, что вы можете ожидать, что other_tags поле что-то вроде %"ref"=>"A 73","width"=>"7"%, то вы можете использоватьи 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 

 Смежные вопросы

  • Нет связанных вопросов^_^