Оператор SQL, который проверяет, содержится ли табличное значение в строке, которую я отправляю - PullRequest
0 голосов
/ 25 января 2019

Я знаю об операторе LIKE, но для того, что я пытаюсь сделать, мне нужно поменять столбец со значением, которое не сработало.

Я использую это в диссон-боте, который подключен к базе данных с таблицей. Таблица имеет два столбца: ключевое слово и ответ. Мне нужен запрос, который может дать мне ответ, когда данная строка содержит ключевое слово.

SELECT response FROM Reply WHERE (insert something here to see if provided string 
contains table value)

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Использование тега SQL означает, что ваш вопрос относится к стандартному SQL (наведите указатель мыши на тег и прочитайте его).

LIKE нельзя использовать для ваших целей, потому что стандарт достаточно ясно показывает, что вы можетеукажите:

<character like predicate> ::=
<row value predicand> <character like predicate part 2>
<character like predicate part 2> ::=
[ NOT ] LIKE <character pattern> [ ESCAPE <escape character> ]

Поэтому вы не можете WHERE 'myliteral' LIKE colname.

Поэтому вам понадобится скалярная функция, но я не знаю ни одной скалярной функции, определенной в стандарте, которую выможно использовать для этой цели.

Таким образом, вы ограничены скалярными функциями, предлагаемыми вашей конкретной СУБД.Например, в DB2 есть POSSTR (source_string, search_string), который можно использовать в качестве POSSTR ('myliteral', colname).

0 голосов
/ 25 января 2019
Select top 1 response
from Reply t
where concat('%',keyword,'%') like '<user provided text>'
--using % let check if the keyword is 'contained' in user's text

PS CONCAT, используемый таким образом, работает на SQLSERVER, проверяет соответствие для используемых вами баз данных, также top1 останавливает запрос, когда находит первое ключевое слово

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