#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>>);
(Ссылочную статью можно найти здесь)