2

私はテーブルを持っています

studentId        Classes
1               Auto CAD,Electronics
2               Instrumentation,Chemical,IT,English
3               Computer,Math,Hindi
4               Physics,Accountancy
5               Bengali,Geography

今、単一の文字列「Instrumentation、Geography、Physics」を使用して検索したい

次のように表示されます

studentId        Classes
2               Instrumentation,Chemical,IT,English
4               Physics,Accountancy
5               Bengali,Geography

Studentid 2 には Instrumentation が含まれ、studentid 4 には Physics が含まれ、studentid 5 には Geography が含まれているためです。

SELECTステートメントを使用してそれを行うにはどうすればよいですか? 「%Instrumentation%」や「%Geography%」などのクラス、または「%Physics%」などのクラスは好きではありません。単一の変数を使用して「Instrumentation、Geography、Physics」を文字列にするか、コンマで区切られた文字列の任意の組み合わせを使用したいからです。

4

3 に答える 3

2

これを試して:

SELECT * 
FROM    your_Table
WHERE   ','+Classes+',' like '%,Instrumentation,%'
OR      ','+Classes+',' like '%,Geography,%'
OR      ','+Classes+',' like '%,Physics,%'

コンマで終わる文字列のみを返すように、列と検索条件にコンマを追加しました

于 2012-09-12T08:46:58.470 に答える
2

T-SQL Likeステートメントを使用することもできますが、理想的には、同じフィールドに複数の値を持つことは想定されていないため、データベースを正規化することをお勧めします - まさにこの理由からです。

Likeの問題は、不要な用語に一致する可能性があることです。%physics% の Like は、「astro-physics」コースにも一致します。これは、希望するものではない可能性があります。

ジョーの例では、コンマを追加すると機能しますが (この場合)、このコードは脆弱です (実際にはハックです)。機会がまだある場合は、データベースを適切に正規化することをお勧めします。

于 2012-09-12T08:48:34.890 に答える
1

検索文字列をテーブル変数にアンパックし、exist 句で使用できます。

declare @S varchar(500)
set @S = 'Instrumentation,Geography,Physics'

declare @T table(Class varchar(50))

while len(@S) > 0
begin
  insert into @T values(left(@S, charindex(',', @S+',')-1))
  set @S = stuff(@S, 1, charindex(',', @S+','), '')
end

select *
from YourTable as YT
where exists (
               select *
               from @T as T
               where ','+YT.Classes+',' like '%,'+T.Class+',%'
             )

SQL フィドル

于 2012-09-12T09:17:58.190 に答える