SQLite извлекает строку из текста в столбце

У меня есть база данных 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 ответа

Если формат не меняется, это означает, что вы можете ожидать, что 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) other_tags, например, "A%" - начинайте с A. 2) abs(substr(other_tags, 3,2)) <> 0.0 - подстрока из 3-го символа, два символа - это число. 3) длина (другие теги) = 4 - длина других тегов = 4

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

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

Другие вопросы по тегам