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 И шоссе ='автомагистраль'