У меня есть процедура, которая выбирает смещение строк из таблицы:
SELECT * --table contains ID and Name columns
FROM Names
ORDER BY ID
OFFSET @Start ROWS
FETCH NEXT @Length ROWS ONLY
В дополнение к параметрам @Start
и @Length
процедура также получает параметр @SearchValue NVARCHAR(255)
. @SearchValue
содержит строку значений, разделенных пробелом, например '1 ik mi'
или 'Li 3'
.
Мне нужно запросить каждую запись, содержащую все эти значения. Таким образом, если @SearchValue
равно '1 ik mi'
, он должен возвращать любые записи, которые содержат все три значения: «1», «mi» и «ik». Еще один способ понять это, перейдя здесь , выполнить поиск в таблице (попробуйте поискать 00 eer 7
) и наблюдать отфильтрованные результаты.
У меня есть свобода изменять разделитель или запускать некоторые функция (в моем случае C#), которая может форматировать массив этих слов.
Ниже приведены наши неудачные попытки (мы еще не пытались реализовать его с помощью OFFSET):
Select ID, Name
From Names
Where Cast(ID as nvarchar(255)) in (Select value from string_split(@SearchValue, ' ')) AND
Name in (Select value from string_split(@SearchValue, ' '))
SELECT ID, Name
FROM Names
WHERE @SearchValueLIKE '% ' + CAST(ID AS nvarchar(20)) + ' %' AND
@SearchValueLIKE '% ' + Name + ' %';
Мы использовали документы Microsoft для string_split для идеи выше.
Завтра я попытаюсь реализовать это решение , но мне интересно, есть ли другой способ сделать это в случае, если один не работает. Спасибо!