SQLite и цель C - ошибка оператора WHERE LIKE - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь написать запрос, содержащий оператор WHERE LIKE, однако я сталкиваюсь со следующей проблемой ...

Когда я пишу запрос как:

"SELECT * FROM db WHERE name LIKE \"%%@%%\""

Это интерпретируется как:

SELECT * FROM db WHERE name LIKE "(null)"

Когда я запрашиваю следующее:

"SELECT * FROM db WHERE name LIKE \"%%%@%%\""

Это интерпретируется как:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"

Это:

[@"SELECT * FROM db WHERE name LIKE \"%" stringByAppendingString:name] stringByAppendingString:@"%\""]

интерпретируется как:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"

Есть ли способ исправить или обойти это?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Если вы хотите использовать строковый формат, он должен быть:

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db WHERE name LIKE '%%%@%%'", someValue];

Первые два %% становятся одиночными %. %@ заменяется любой строкой в ​​someValue. И последние два %% становятся синглом %.

query заканчивается:

SELECT * FROM db WHERE db LIKE '%apple%'

при условии, что someValue является строкой @"apple".

В дополнение к этому, лучше избегать использования SELECT * FROM, если вы используете различные функции sqlite3_column_xxx и конкретные индексные номера, потому что вы не можете быть уверены, что порядок возвращаемых столбцов соответствует вашему коду. Безопаснее и понятнее явно перечислить нужные столбцы в запросе.

0 голосов
/ 27 июня 2018

Попробуйте это. Это сработает.

  NSString *yourSqlQuery = [NSString stringWithFormat:@"Select * from yourTableName where name LIKE '%%%@%%'",name];
0 голосов
/ 26 июня 2018

Doi! Это:

[@"SELECT * FROM db WHERE name LIKE \"%%" stringByAppendingString:name] stringByAppendingString:@"%%\""]

интерпретируется как:

SELECT * FROM db WHERE db LIKE "%apple%"

Что на самом деле то, что я ищу (сначала не осознавал), эта работа кажется немного ... излишне долгой.

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