Как избежать подчеркивания в запросе SQLite с помощью предложения where - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы запросить следующую базу данных:

sqlite> select * from queue;
739cdbff68914b688509372af85ac05e|31967522_13|rendering
810c69dc4d68425f83c82aa1ac0a625e||waiting_train
af6f5d0c5cb2472fb311ccf6b738dacd|31967524_2|rendering
cf0164f51da64986a4ced63301aa1d85|31967522_3|training
ef07bb25da94472f87460768ea0b8f7d|31967522_16|rendering
testuidaxc|31967523|training

Запрос с job=31967523 работает:

sqlite> select * from queue where job='31967523';
testuidaxc|31967523|training

Однако для заданий с подчеркиванием он не работает нетНеважно, как я пытался:

sqlite> select * from queue where job='31967522_3';
sqlite> select * from queue where job='31967522[_]3';
sqlite> select * from queue where job=31967522[_]3;
Error: near "[_]": syntax error
sqlite> select * from queue where job='31967522[_]3';

Все ничего не вернул или ошибка.Кажется, что подчеркивание вызывает проблему, но как мне избежать этого?Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018
 select * from queue where job='31967522'||CHR(95)||'3';
 select * from queue where job='31967522'||CHR(95)||'3';
 select * from queue where job=31967522'||CHR(95)||'3';
 select * from queue where job='31967522'||CHR(95)||'3';
 select * from queue where job='31967522'||'_'||'3';
 select * from queue where job='31967522'||'_'||'3';
 select * from queue where job=31967522'||'_'||'3';
 select * from queue where job='31967522'||'_'||'3';
0 голосов
/ 16 октября 2018

Я предполагаю, что вместо следующего запроса выбора:

SELECT * FROM queue WHERE job = '31967522_3';

вы действительно намеревались написать этот запрос:

SELECT * FROM queue WHERE job LIKE '%31967522_3%';

Буквальное подчеркивание при использовании с равными не должно иметь проблем.При использовании LIKE мы можем избежать подчеркивания:

SELECT * FROM queue WHERE job LIKE '%31967522\_3%' ESCAPE '\';

Приведенный выше запрос будет соответствовать любой записи, чья job содержит буквенную строку 31967522_3.

Из документация кажется, что ESCAPE всегда требуется, когда намеревается использовать определенный символ в качестве escape-символа для LIKE.То есть, по-видимому, не существует escape-символа по умолчанию.

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