Строковые функции SQLite довольно ограничены, но вы используете неявные преобразования типов, чтобы разбить вашу строку.Что-то вроде этого должно сделать это:
select xy + 0 as x,
substr(xy, length(xy + 0) + 2) as y
from some_table
Это должно работать, пока у вас нет начальных нулей или пробелов или внутренних пробелов.Добавление нуля превращает значение в число, поэтому '10,5' + 0
становится просто 10
;затем вызов length
для этого превращает его обратно в строку и дает вам длину строки, затем настройте ее, чтобы учесть изменение запятой (+1
) и длины до смещения (+1
), и вы получитеваши 5 из '10,5'
.
Например:
sqlite> select '10,5' + 0 as x, substr('10,5', length('10,5' + 0) + 2) as y;
x|y
10|5
Тем не менее, вам действительно следует изменить дизайн схемы, чтобы иметь отдельные столбцы для координат X и Y, храня структурированные данные внутриодин столбец, как правило, плохая идея.
Обновление для комментариев : SQLite также позволит вам делать такие вещи:
select value,
xy + 0 as x,
substr(xy, length(xy + 0) + 2) as y
from some_table
where x < 2000
and y < 2000
или даже:
select value
from some_table
where (xy + 0) < 2000
and substr(xy, length(xy + 0) + 2) < 2000
Такие запросы в конечном итоге будут выполнять полное сканирование таблицы, поэтому они могут быть слишком медленными для вас.Исправление схемы, чтобы иметь отдельные столбцы координат X и Y OTOH даст вам быстрые запросы.