Как использовать SQL-запрос «LIKE» с SQL Interpolate в R? - PullRequest
0 голосов
/ 07 октября 2019

Я пишу приложение на R, которое выполняет параметризованные запросы и отправляет их в базу данных, чтобы вернуть соответствующую информацию в таблицу данных в приложении. Из-за характера поискового запроса мне нужно использовать SQL-термин LIKE со знаком% вокруг поискового запроса. И чтобы защитить базу данных от внедрения SQL, мне нужно использовать функцию sqlInterpolate. Но у меня возникают проблемы с тем, как функция sqlInterpolate выполняет запрос.

Прямо сейчас, когда я захожу в консоль R, это работает:

> sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE '%000g7%'")
> dbGetQuery(conn, sql)

Но этоне,

> str <- "000g7"
> sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE '%?search%'", search = str)
> dbGetQuery(conn, sql)

, он просто возвращает пустой список. Если бы я мог получить некоторую помощь с синтаксисом запроса, я был бы очень признателен. Я почти уверен, что это как-то связано с апострофами или чем-то в этом роде. Или, если есть лучший способ сделать это, я весь слух.

1 Ответ

2 голосов
/ 07 октября 2019

В случае оператора LIKE, % действительно являются частью строки, которую вы ищете, поэтому вам просто нужно добавить их к значению, которое вы ищете, прежде чем интерполировать значение в запросе,Вы должны использовать

str <- "000g7"
sql <- sqlInterpolate(conn, "SELECT * FROM table WHERE Column1 LIKE ?search", 
  search = paste0("%", str, "%"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...