2016-08-12 14 views
0

"、"で区切られた値を持つ列を持つテーブルがあります。 例の列グループ:私は例20の広告を検索することができ、列グループの条件はそれが1と3行を返すか、20280で検索し、それを返す必要がありますべきところでSELECTを作成したいSQL Serverで条件が区切られた列の条件

id column group: 

1 10,20,30 
2 280 
3 20 

1および2行。

お願いします。

+1

コンマ区切りの項目としてデータを保存しないでください。それはあなたに多くのトラブルを引き起こすだけです。行ごとに1つの値がSQLの方法です! – jarlh

+0

実際、答えた後、私はこれが非常に共通の話題であることを認識しており、すでに多くの回答があります。実際に['sql split string'](http://stackoverflow.com/search?q=sql+split+string)を検索すると、非常に詳細で洞察に満ちたいくつかのQ /が出てくるでしょう。 –

答えて

1

としては、あなたの質問に来る..単一の行is not a good ideaでみとめ値を格納する、コメントで

を指摘し、あなたがテーブルにカンマ区切りを分割するsplit string functions from hereのいずれかを使用し、それらを照会することができます。..

create table #temp 
(
id int, 
columnss varchar(100) 
) 

insert into #temp 
values 
(1,'10,20,30'), 
(2, '280'), 
(3, '20') 

select * 
from #temp 
cross apply 
(
select * from dbo.SplitStrings_Numbers(columnss,',') 
)b 
where item in (20) 

id columnss Item 
1 10,20,30 20 
3 20   20 
1

短い答えは:しないでください。

代わりにテーブルを少なくとも3NFに正規化してください。どのようなデータベースの正規化がわからない場合は、いくつかの読書を行う必要があります。

これは絶対に行う必要がある場合(これはレガシーシステムであり、テーブル構造を変更することはできません)、TSQLによる文字列分割に関する記事があります。 (例えば以下を参照してくださいhttp://sqlperformance.com/2012/07/t-sql-queries/split-strings

あなただけ検索したいので、あなたが何か書くことができますので、あなたが本当に、文字列を分割する必要はありません。

t(id int, list varchar(max))を検索し、するテーブルである
SELECT id, list 
FROM t 
WHERE ','+list+',' LIKE '%,'[email protected]+',%' 

を@searchValueはあなたが探している値です。複数の値を検索する必要がある場合は、それらをテーブルに追加して、結合またはサブクエリを使用する必要があります。

など。 s(searchValue varchar(max))場合は、検索する値のテーブルです:

SELECT distinct t.id, t.list 
FROM t INNER JOIN s 
     ON ','+t.list+',' LIKE '%,'+s.searchValue+',%' 

あなたはADO.Netから、これらの検索値は、テーブルパラメータを考慮する渡す必要がある場合。