• 締切済み

WHERE句を動的設定する方法

JitFの回答

  • JitF
  • ベストアンサー率42% (16/38)
回答No.1

一般的な回答になってしまいますが、「ホスト変数」といわれるものを使えばできると思います。 SQLサーバ(Microsoftの?)は使ったことが無いので具体的にはよく判りませんが、ヘルプなどを検索すると出てくるかもしれません。

関連するQ&A

  • SQL分のWHERE句について

    SQLのWHERE句について ================================== ABC :入力値(2又は5バイトの可変) T.テーブル.フィールド:ABCが格納されているテーブル(格納すると同時に5桁になります。) 例:01(入力値)⇒01000(格納値) ================================== 参照時のWHERE句の作成の仕方を教えてください。 ※検索値が2桁の場合は、格納値5桁の前方2桁一致でHITさせます。  また5桁の場合は、格納値5桁の全一致です。 今考えているのでは、 IF ABC <> "" THEN IF LenB(ABC) = 2 THEN SQL_WHERE = SQL_WHERE & "AND (LEFT(T.テーブル.フィールド,2) = '" & ABC & "' )" ELSEIF SQL_WHERE = SQL_WHERE & "AND (T.テーブル.フィールド = '" & ABC & "')" END IF END IF です。 宜しくお願いします

  • SQL WHERE句 分岐?

    SQL Server 2005 を使っております。 WHERE句の分岐といいますか、記述の方法がわからないのですが、下記がその部分になります。 下記のコードを実行すると、都道府県、血液型、両方に何かしらのデータが入っているものしか抽出してきません。都道府県、血液型、どちらかの値がNullの場合でも、どちらかの条件が合致していれば、抽出したいのですが、どう記述すればよろしいでしょうか? 下記のコードが Null = Null を認識していれば このコードでも抽出してくるんでしょうが、 Null = Null だと抽出しないんですね。 何卒よろしくお願いいたします。 WHERE (IsNull(@A,dbo.テスト.都道府県) = dbo.テスト.都道府県) AND (IsNull(@B,dbo.テスト.血液型) = dbo.テスト.血液型

  • WHERE句内でプライマリキーの検査ができない

    こんにちは。mySQL初心者です。 例えば、「sample」というDBに以下の3つのフィールドのあるテーブル「text」があるとします。 (実際には、DATETIME型のフィールドも含めて20列あります) key => 整数型で、プライマリキー&オートインクリメントを設定 status => テキスト型(UTF-8) note => テキスト型(UTF-8) ここで、「SELECT * FROM text WHERE key=1」というSQLで1つ目のレコードを取得しようとすると、「#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key=1 LIMIT 0, 30' at line 1」というエラーが出てしまいます。 「SELECT * FROM text WHERE status='sample_01'」や「SELECT * FROM text WHERE note='test entry'」というSQL文ならちゃんとデータを取得できるのですが、「WHERE key=1」のようにプライマリキーで検索しようとするとエラーになるのは何故でしょうか。 どなたか見当が付くかたがいらっしゃいましたら、教えていただけないでしょうか。 よろしくお願いします。 <環境> XAMPP Ver.1.7.4で、mySQLは Ver. 5.5.8です。

    • ベストアンサー
    • MySQL
  • 特定条件でWHERE句の条件を変更したい

    @jouken int @sql varchar(MAX) @select varchar(MAX) @where varchar(MAX) set @select = 'select * from table1' set @where = ' where case when @jouken = 0 then 'field1 = 1' when @jouken = 1 then 'field1 = 1 or field2 = 1' when @jouken = 2 then 'field1 = 1 or field2 = 1 or field3 = 1' end ' set @sql=@select+@where exec(@sql) 上記のような文字列の組み合わせでの作成でやりたいことはできたのですが、 こちらを直接SQLの中でやりたいのです。 以下の文は機能しません。 select * from table1 where case when @jouken = 0 then field1 = 1 when @jouken = 1 then field1 = 1 or field2 = 1 when @jouken = 2 then field1 = 1 or field2 = 1 or field3 = 1 end ご教授の程、よろしくお願い致します

  • WHERE句について

    numeric, 5(3,0)のフィールドがあり そのフィールドの値が600番台のものを抽出したいのですが どのような方法が一番効率的かご教授ください。 DBはsqlserver2000を使用しています。

  • 引数によってwhere句を切り替える方法

    PL/SQLで開発しています。 一つのテーブルで検索条件(引数)によって検索するカラムを切り替えたいのですが、 カーソルをいくつも作らず、 一つのSELECT文で書く方法ってないのでしょうか? OR条件などを使って考えたのですが、うまくいきません。。 (例) SELECT * FROM 売り上げ情報 WHERE (品番 = 引数1 OR 商品名 = 引数2) 引数が無い時は"引数1"・"引数2"がNULLになるので、 カラムがPKなどになっていれば引数が片方しかなくてもうまく動作するのですが、 制限などがかかっていなくNULLで登録されているデータが存在すると余計なデータまでとれてしまいます。 DECODEなどでカラムに存在しない値に変換しようかとも思ったのですが、 なんか不自然な気が@@; いい方法があれば教えてください。

  • WHERE句でOR ANDを使うと抽出が変

    SQLのwhere句について教えてください。Table_AとTable_Bはjoinされています。 下記の条件で、値を抽出したいです。型はintです。 Field1は必ずNULL Field2は値が1~14のどれか。それ以外にはマッチしない Field3は0か3のどちらかにマッチ。 Field4は2,3,4,8に以外にマッチ。 Field5は0,6のどちらかいにマッチ。 Field6はNULLを抽出 Field7はNULLを抽出 よって、下記のSQLを書きました。しかしながら、Field1~Field3まで抽出を かけた時に、1万件だったのが、Field1~Field5までを含めると、1万2000件に なってしまいます。なぜだかわかりません。何が間違っているかお教え 頂けないでしょうか?また正しいwhere句以下の条件はどのように正しく書けばいいのでしょうか? WHERE `TABLE_A`.`Field1` IS NULL AND `TABLE_B`.`Field2` = 1 or `TABLE_B`.`Field2` = 2 or `TABLE_B`.`Field2` = 3 or `TABLE_B`.`Field2` = 4 or `TABLE_B`.`Field2` = 5 or `TABLE_B`.`Field2` = 6 or `TABLE_B`.`Field2` = 7 or `TABLE_B`.`Field2` = 8 or `TABLE_B`.`Field2` = 9 or `TABLE_B`.`Field2` = 10 or `TABLE_B`.`Field2` = 11 or `TABLE_B`.`Field2` = 12 or `TABLE_B`.`Field2` = 13 or `TABLE_B`.`Field2` = 14 or `TABLE_B`.`Field3` = 0 or `TABLE_B`.`Field3` = 3 or `TABLE_B`.`Field4` <> 2 or `TABLE_B`.`Field4` <> 3 or `TABLE_B`.`Field4` <> 4 or `TABLE_B`.`Field4` <> 8 or `TABLE_B`.`Field5` = 0 or `TABLE_B`.`Field5` = 6 or `TABLE_B`.`Field6` is NULL or `TABLE_B`.`Field7` is NULL

  • select文のwhere句に配列を入れて検索したい

    こんばんは。 題名の通り、select文のwhere句に配列を入れて検索したいのですが、 同じ質問↓も見つけ、やってはみるのですがうまくいかないので、教えてください。 http://oshiete1.goo.ne.jp/qa2940474.html 現在、 $member_id という配列にデータを入れ(この配列には正しく値が入っています。) $sql = "SELECT * FROM テーブル名 WHERE id IN (".$member_id."); としているのですが、うまくいきません。 どこがおかしいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle10gのsql分についての質問です。(WHERE句)

    Oracle10gのsql分についての質問です。(WHERE句) 先ほどの続きになります。申し訳ございません。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と 教えていただき成功いたしました。 ところが、WHERE句にこれと同じ文を書くと、 「リテラルが書式文字列と一致しません」とエラーに なります。 どうすれば良いのでしょうか? 宜しくお願い致します。

  • where句のlikeと=の違いについて

    Postgresバージョン7.1.1からバージョン7.4.6にしたところ困ったことがあります。 テーブル名: hoge カラム名: col (←varchar(12)) データの中身はまるっきり同じ物が入っています。 という環境です。 そこで、SQLを実行するとバージョンによって結果が異なり不可解なのです。何か分かることがありましたら返事をお願いします。 [実行したSQL] select col from hoge where col = 'コル' select col from hoge where col like 'コル' [7.1.1] 共に、答えは一つだけ'コル'が表示されます。 [7.4.6] likeの時は'コル'が一つだけ表示されます。 =の時は何十個か出てきます。 以上、宜しくお願い致します。