0

Я хочу сравнить две строки с несколькими значениями друг с другом, чтобы увидеть, существует ли одно из значений в другой строке.mssql сравнить две строки с несколькими значениями в where where

У меня есть таблица со строкой nvarchar с значениями, разделенными каналами, например.

'значение1 | значение2 | значение3'

Я также иметь переменную NVARCHAR с запятой разделены строки, например,

«значение2, value3»

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

select * from table1 
    WHERE column in (select val from dbo.split(@variable,',')) 

это не будет работать, если столбец также содержит больше значений.

select * from table1  
    WHERE (select val from dbo.split(column,'|')) in (select val from dbo.split(@variable,',')) 

Здесь он пытается сравнить 2 сгенерированные таблицы друг с другом, что не удается. Я пробовал это с помощью соединений, но не могу найти способ правильно это сделать. Я использую MSSQL 2008R2

+0

Это очень плохой дизайн базы данных, хранения значений как CSV или труб разделенных значений. вы должны узнать о нормализации. – Jens

+0

Вы действительно должны переосмыслить свой дизайн базы данных. разграниченные значения в одном столбце - это неправильная вещь в 99.99999% случаев. –

+0

Если существует возможность изменить это из списка с разделителями на нормализованную таблицу, сделайте это сейчас; это первый укус торта боли. –

ответ

1

Может быть, это может помочь вам:

select * from table1 where exists 
(select * from 
    (select val from dbo.split(table1.column,'|')) a, 
    (select val from dbo.split(@variable,',')) b 
where a.val=b.val) 
Смежные вопросы