Функция sqlite instr не работает в некоторых случаях - PullRequest
0 голосов
/ 18 апреля 2019

В Sqlite у нас есть таблица1 с столбцом column1, есть 4 строки со следующими значениями для column1

(p1,p10,p11,p20)

DROP TABLE IF EXISTS table1;
CREATE TABLE table1(column1 NVARCHAR);
INSERT INTO table1 (column1) values ('p1'),('p10'),('p11'),('p20');
Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',','+column1+',') from table1;

Мы должны получить позицию каждого значения column1 в данной строке:
, p112, p108, p124, p204, p11, p1124, p1, p10, p20,

запрос

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',column1) from table1;

возвращает значения (2,7,2,17)

это не то, что нам нужно

запрос

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',','+column1+',') from table1;

возвращает 9 для всех строк - оказалось, что это позиция первого символа "0" ???

Как мы можем получить точные позиции column1 в данной строке в sqlite ??

1 Ответ

2 голосов
/ 18 апреля 2019

В SQLite оператор объединения ||, а не + (например, SQL Server ), поэтому сделайте следующее:

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',',' || column1 || ',') from table1;

Что выс вашим кодом было добавление числа, что привело к 0, потому что ни один из строковых операндов не мог быть успешно преобразован в число,поэтому instr() искал '0' и всегда находил его в позиции 9 строки: ',p112,p108,p124,p204,p11,p1124,p1,p10,p20,'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...