“ =”のMySQLワイルドカード; -ありますか
質問
だから、
SELECT * FROM table WHERE col LIKE '%'
はすべてを返します。クエリにワイルドカードはありますか
SELECT * FROM table WHERE col = '*'
明らかに *
は機能しません。ワイルドカードを配置したい場所を示すためにそこに置いただけです。選択している列には1〜12の整数が含まれており、特定の番号を持つすべてのレコード、またはワイルドカードを持つすべてのレコードのいずれかを選択できます。
ありがとう、
解決
LIKEは基本的に=と同じですが、LIKEではワイルドカードを使用できます。
これらの2つのクエリは同じ結果を返します:
SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';
LIKEクエリに「%」がない場合、実質的に「=」と同じです。
整数列で選択を行う場合は、IN()またはBETWEEN演算子の使用を検討する必要があります。ただし、少なくとも2つの異なる種類のクエリが必要であることが条件により、クエリではなくコードで処理する必要がある2つの個別の条件があるようです。
編集:LIKEと=は、通常のハムドラム文字列比較の使用法でのみ類似していることを明確にする必要があります。の詳細については、 MySQLマニュアルを確認してください。同じではない状況(言語セットなど)があるため、どのように機能するか。
他のヒント
すべてを選択する場合、なぜWHERE句を付加するのですか?ワイルドカードを入れるのではなく、条件付きでそのままにしておきます。
LIKEを使用する理由は、=がワイルドカードサポートを提供しないためです。そうでなければ、LIKEの理由はありません
SELECT * FROM table WHERE col RLIKE '.*'
i.e。正規表現LIKE。
zombatの答えは素晴らしいですが、私は彼の答えであなたが整数を選択していることに気づきました。彼はIN()とBETWEEN()に言及しました。これらの構文を使用した例と、整数フィールドに使用できる他のオプションを次に示します。
SELECT * FROM table WHERE col = 1;
SELECT * FROM table WHERE col BETWEEN 1 AND 12;
SELECT * FROM table WHERE col BETWEEN 6 AND 12;
SELECT * FROM table WHERE col <= 6;
SELECT * FROM table WHERE col < 6;
SELECT * FROM table WHERE col >= 6;
SELECT * FROM table WHERE col > 6;
SELECT * FROM table WHERE col <> 6;
SELECT * FROM table WHERE col IN (1,2,5,6,10);
SELECT * FROM table WHERE col NOT IN (1,2,5,6,10);
クエリがパラメータ駆動であると仮定すると、おそらくcaseステートメントが適切です
select * from mytable
where col like case when @myvariable is null then % else myvariable end
値が必要ない場合は @myvariable
はnullになります。それ以外の場合は、渡された整数値を使用します。
レポートのストアドプロシージャを作成中にこのようなケースに遭遇しました 以下は私の解決策です、これがあなたが念頭に置いていたものであることを願っています:)
set @p = "ALL";
クエリ:
select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;
値が範囲(1,12)にある場合:
select * col&gt; = 5およびcol&lt; = 5のテーブルから; //これはcol = 5と同じです
select * col&gt; = 0およびcol&lt; = 12;のテーブルから//これはcol = any valueと等しい
2つのパラメーターを適切に選択することにより、同じ行で両方の効果を生成できます。 列の特定の値をチェックするか、その列を完全に無視するかの2つの異なる方法で動作する単一の準備されたステートメントが必要な場合、同様の問題に直面しました。