"、"で区切られた値を持つ列を持つテーブルがあります。 例の列グループ:私は例20の広告を検索することができ、列グループの条件はそれが1と3行を返すか、20280で検索し、それを返す必要がありますべきところでSELECTを作成したいSQL Serverで条件が区切られた列の条件
id column group:
1 10,20,30
2 280
3 20
1および2行。
お願いします。
"、"で区切られた値を持つ列を持つテーブルがあります。 例の列グループ:私は例20の広告を検索することができ、列グループの条件はそれが1と3行を返すか、20280で検索し、それを返す必要がありますべきところでSELECTを作成したいSQL Serverで条件が区切られた列の条件
id column group:
1 10,20,30
2 280
3 20
1および2行。
お願いします。
としては、あなたの質問に来る..単一の行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
短い答えは:しないでください。
代わりにテーブルを少なくとも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から、これらの検索値は、テーブルパラメータを考慮する渡す必要がある場合。
コンマ区切りの項目としてデータを保存しないでください。それはあなたに多くのトラブルを引き起こすだけです。行ごとに1つの値がSQLの方法です! – jarlh
実際、答えた後、私はこれが非常に共通の話題であることを認識しており、すでに多くの回答があります。実際に['sql split string'](http://stackoverflow.com/search?q=sql+split+string)を検索すると、非常に詳細で洞察に満ちたいくつかのQ /が出てくるでしょう。 –