Искать в столбце строки с разделителями

У меня есть строка поиска, подобная этой: 'value1, value4, value8'

У меня есть таблица базы данных с записью вроде:

id | value -----+------------------------ 1 | value1,value2,value3 2 | value3,value4,value9 3 | value4,value8,value9 4 | value2,value3,value9 

Теперь я ищу способ поиска всех записей из базы данных, содержащей значения1, value4 или value8.

В этом примере мне нужны записи 1, 2 и 3, когда я делаю выбор.

У меня уже есть функция split, которая разбивает мою строку поиска на IN VALUES следующим образом: 'value1', 'value4', 'value8', но я не могу заставить его работать, чтобы выбрать нужные записи.

Благодарю.

Может быть, что-то вроде этого:

Данные испытаний

 CREATE TABLE Table1 ( id INT, value VARCHAR(200) ) INSERT INTO Table1 VALUES (1,'value1,value2,value3'), (2,'value3,value4,value9'), (3,'value4,value8,value9'), (4,'value2,value3,value9') 

Функция разделения

 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 ) GO 

запрос

 DECLARE @searchString VARCHAR(100) SET @searchString='value1,value4,value8' ;WITH CTE AS ( SELECT split.s as searchString FROM dbo.Split(',',@searchString) AS split ) SELECT * FROM Table1 WHERE EXISTS ( SELECT NULL FROM dbo.Split(',',Table1.value) AS split WHERE EXISTS ( SELECT NULL FROM CTE WHERE CTE.searchString=split.s ) ) 

результат

 id value 1 value1,value2,value3 2 value3,value4,value9 3 value4,value8,value9 

редактировать

Эта функция разделения принимает разделитель и varchar для разделения. Это рекурсивная функция, которая запускает начало и конец, где сфера находится в введенном varchar . Когда вычисляется начало и конец, substring является простой задачей для выполнения.

Чтобы получить то, о чем вы просите, я думаю, вам нужно либо вставить ваши разделенные результаты (без одинарных кавычек) во временную таблицу, либо заставить функцию расщепления вернуть таблицу. Тогда вы можете сказать:

 SELECT column1, column2, column3 FROM table1 WHERE value in (select * from #values) 

ИЛИ

 WHERE value in (select * from dbo.StringSplitFunc(...)) 

в зависимости от того, какой подход вы принимаете.

если у вас есть соответствующие значения в коде, и он будет статическим, это может сработать:

 select * from table where value like '%value1%' and value like '%value4%' and value like '%value8%' 

Это если вы хотите, чтобы он содержал все значения. Если вы хотите, чтобы он содержал либо, либо вы переключаете 'и' for 'или'

Редактировать:

Имея значения в коде, вы можете динамически строить инструкцию SQL в коде.

 string statement = "select * from table where value like '%value%'"; foreach (string value in collectionOfValues) { statement += " and value like '" + value + "'"; } 

Я бы, конечно, использовал SqlParameters вместо того, чтобы поместить значение непосредственно в оператор, но вы поймаете мой дрейф.

  • разделитель разделителей с запятой SQL на строки
  • Разделение пар из данных столбца в SQL Server
  • Как разбить столбец текста адреса на несколько столбцов
  • Разделение T-SQL на разделитель
  • Поскольку зацикливание плохое, как я должен выполнить то, что я пытаюсь сделать?
  • Вставка SQL Server Split и Table Insert
  • Суммарные столбцы столбцов, хранящиеся как текст, разделенный запятыми, в sql
  • Как разбить строку, чтобы я мог получить доступ к элементу x?
  • Разделить один столбец данных с разделителями-запятыми на несколько столбцов в SSIS
  • Разделение динамической строки
  • Разделить несколько строк на несколько столбцов
  • Interesting Posts

    Калуклат по формуле в колонке

    Автоматическое переключение между сборкой и отчетностью DB i .NET 4.5 и SQL Server 2012

    Msg 102, Уровень 15, Состояние 1, Процедура <имя_процесса>, строка 40 Некорректный синтаксис около '('

    Использование точки Northing / Easting для соответствия ближайшим геометрическим данным в SQL Server

    Почему это левое соединение оценивается при перекрестном соединении?

    Нужна помощь в понимании и улучшении плана запроса (Оценочное количество строк сильно отличается от фактического количества строк)

    Что означает точность и масштаб в типе данных времени на сервере Sql?

    Создайте таблицу SQL с различным количеством столбцов

    tSQL NOT IN Query

    Что я могу использовать вместо Include?

    Генераторы данных для SQL-сервера?

    Выполнение запроса с двумя столбцами, вычисленными из данных в одном столбце

    Передача данных SSIS с Azure SQL на локальный SQL Server 2016

    Oracle DB: вернуть второй запрос, если первый запрос пуст

    База данных MS SQL с 10-метровыми строками, преобразование varchar в int в столбце

    Давайте будем гением компьютера.