Как преобразовать строковый ввод в «where in»

#sql #string #postgresql #csv #thingworx

#sql #строка #postgresql #csv #thingworx

Вопрос:

У меня есть служба Thingworx (SQL-запрос) в моей базе данных, например. GetCookiesByIds

У меня есть параметр ids (СТРОКА) со значением 1,2,3

Я хотел бы сделать запрос:

 SELECT * FROM Cookies WHERE id IN ([[ids]])`
  

Но у меня есть исключение.

Как преобразовать мои идентификаторы параметров в допустимый формат?

Ответ №1:

A)

SELECT * FROM cookies WHERE id = any([[ids]]::int[])

Значение ids должно быть как: {1,2,3}


Б)

 SELECT * FROM cookies WHERE id = any(
    CONCAT( '{', [[ids]], '}' ) ::int[]
)
  

Значение ids должно быть как: 1,2,3

Ответ №2:

Простой переносимый вариант:

 select *
from cookies
where ',' || $1 || ',' like '%,' || id || ',%'
  

… где $1 представляет строку CSV, которая является параметром вашего запроса.

В Postgres мы также можем использовать массивы:

 select *
from cookies
where id = any(string_to_array($1, ','))
  

Ответ №3:

Синтаксис, если вы хотите это сделать, выглядит следующим образом

 SELECT * FROM Cookies WHERE id IN (<<ids>>)
  

Служба Thingworx объединит ваш входной параметр в запросе, если вы используете <<>> , и определит его как фактические параметры, если вы используете [[]]

Ответ №4:

Добавьте еще несколько деталей к правильному ответу Тома V…

КОНТЕКСТ

Окружение входного параметра двойными квадратными скобками [[IDs]] — это подстановка параметров, которая обрабатывает ввод ТОЛЬКО как параметр. Чтобы передать строковую переменную во входном параметре, вы должны использовать двойные угловые скобки <<IDs>> , которые допускают замену строки.

Но имейте в ВИДУ, что подстановка строк может подвергнуть вашу базу данных SQL-инъекции, поэтому обязательно очистите ввод и защитите службы с помощью подстановки строк.

ПРИМЕР

Входной параметр: идентификаторы (СТРОКА)
[значение может содержать пробел, но ДОЛЖНО быть разделено запятой, чтобы возвращать несколько значений]

Идентификаторы = 26 504

Выходной параметр: результат (информация)
[в моем примере возвращается информационная таблица, но выходные данные могут быть любого типа]

Запрос:

 SELECT * FROM Cookies WHERE id IN (<<IDs>>);
  

(Ссылочную статью можно найти здесь)

изображение показывает приведение идентификаторов