У меня стол SW_TBL_KEYWORD
Keyword
-------
ATOP
APMT
RSND
Это мой тестовый запрос
DECLARE @string NVARCHAR(MAX)
SELECT @string = 'ATOP,APMT'
SELECT *
FROM SW_TBL_KEYWORD
WHERE Keyword LIKE @string
поэтому мне нужно передать эти несколько значений, которые поступают из бэкэнда, в оператор like. Тестовый запрос не работает.
ПОМОЩЬ!!!
Вы уверены, что используете mysql? Похоже на код sqlserver.
@Susang Да, это похоже на SQL Server. Ой.
да, я редактировал. его сервер sql
Какую версию sqlserver вы используете ??
Sql Server 2014 версии 12.0


как вы это пробовали, работает только с функцией Mysql "IN"!
Это означает, что вы должны делать это как
select * from SW_TBL_KEYWORD where Keyword like "ATOP" OR Keyword LIKE "APMT"..
также следует упомянуть, что вы можете использовать% до, после или до и после, например,
select * from SW_TBL_KEYWORD where Keyword like "%TO%"
также выдаст вам результат "ATOP" ..
Поэтому, если вы хотите найти более одного слова, вам придется строить свой запрос в зависимости от количества слов!
Я не знаю точно, как вы получаете свои условия поиска, но если вы разделите их знаком ",", вы можете взорвать это, а затем изучить его и создать свой запрос!
значения являются динамическими, поступают из раскрывающегося списка, это всего лишь тест, и его запрос к серверу sql, плохо, я добавил mysql в качестве тега .. Я фактически передал несколько значений параметру из раскрывающегося списка, теперь мне нужно использовать как оператор или любой другой соответствующий для выполнения запроса. помощь!
и да, я хотел бы упомянуть, я использовал функцию Replace для итерации, но безрезультатно.
Вы просто замените like @string на REGXP REPLACE(@string, ",", "|"), чтобы достичь того, чего хотите
select * from SW_TBL_KEYWORD where Keyword REGXP REPLACE(@string, ",", "|")
Вопрос касается SQL Server (СУБД Microsoft) - у которого НЕТ есть оператор / функция REGXP
@marc_s Исходный вопрос был помечен тегом MySQL. Я удалю это сейчас.
ПОПРОБУЙ ЭТО: для постоянного и гибкого решения
Создайте функцию Split, чтобы выполнить это требование и также использовать в будущем.
CREATE FUNCTION dbo.Split(@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
Ваша таблица и ценности
DECLARE @SW_TBL_KEYWORD TABLE(Keyword VARCHAR(500))
INSERT INTO @SW_TBL_KEYWORD VALUES
('ATOP'),
('APMT'),
('RSND')
Логика для достижения ваших требований
DECLARE @string VARCHAR(MAX)
SELECT @string='ATOP,APMT'
Разделите значение, разделенное запятыми, используя функцию, которую вы создали, и сохраните в переменной таблицы или во временной таблице.
DECLARE @tmp_filter TABLE(keyword VARCHAR(500))
INSERT INTO @tmp_filter
SELECT s FROM dbo.Split(',', @string)
Присоединитесь к таблице фильтров с фактической таблицей, используя Like, но после просмотра вашего фильтра и фактических значений я думаю, вам нужно точное совпадение, а не частичное использование like
SELECT t1.*
FROM @SW_TBL_KEYWORD t1
INNER JOIN @tmp_filter t2 ON t1.Keyword LIKE ('%' + t2.keyword + '%')
Для точного совпадения мы можем изменить соединение с помощью строки ниже
INNER JOIN @tmp_filter t2 ON t1.Keyword = t2.keyword
ПРИМЕЧАНИЕ: это долгосрочное решение и полезно для других подобных задач. Если вы использовали SQLSERVER2016 or newest, тогда вы можете использовать функцию STRING_SPLIT вместо создания пользовательской функции.
можно попробовать что-нибудь вроде stackoverflow.com/questions/1127088/mysql-like-in