• ベストアンサー

ORACLEのLIKE演算子について

いつも拝見させて頂いております。 ORACLEのLIKE演算子についての質問です。ある抽出条件 をシステムで作成して、その抽出条件を元にNOTで括って正反対 の抽出条件を作成したいと思っています。しかし抽出条件の中にL IKE演算子が含まれていて、パターンマッチングの抽出条件が存 在する場合にNOTで括って正反対の抽出条件を作成すると、NU LLのデータが含まれなくなってしまい、正しい結果が得られませ ん。LIKE演算子はNOT演算子を付加するとNULLデータは 抽出できないものなのでしょうか。ご存じの方がいらっしゃいまし たらご教授頂けないでしょうか。宜しくお願い致します。 WHERE NOT ( 抽出条件 ) ↑このような感じ

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

抽出速度が犠牲になっていいのなら・・・ WHERE NOT ( NVL(a, 'NULL' ) LIKE b ) フェッチするたびに変換が行われるので遅くなります。 また、aにインデックスが張ってあっても無視されます。

その他の回答 (1)

回答No.1

nullは「is null」以外では何やっても抽出できなかったような、、、(´-`) where not(a like b) or a is null

s_yasuaki
質問者

お礼

早速の回答ありがとうございます。 「IS NULL」は現在、システムで抽出条件を事前に作成 している都合上、文字列解析をして埋め込まなければな らなくなるため、避けたかったのですが、やはりIS NULL しか、解決策はないのですかねぇ。

関連するQ&A

  • ACCESS2000でLike演算子

    ACCESS2000で開発しています。 とあるフォーム(これにはレコードソース:SELECT…を記述しています) をDocmd.Openで開く時にWhereConditionを設定しています。 このWhereConditionには、 (A条件) AND (B条件) AND (C条件) AND フィールド名 Like 'XX*' といった内容を書いているのですが、正常に抽出できません。 (A条件) AND (B条件) AND (C条件) までですと抽出できるのですが、Like演算子を使った条件を加えると 0件になってしまいます。 どこが悪いのか全くわかりません。 ちなみに全てのSQL文をクエリのSQLにコピーすると成功します。 ご存知の方、よろしくお願いします。

  • Access2003のnot likeとLIKEの結果異なる場合

    Access2003の選択クエリでLIKEの結果とNOT LIKEの結果が異なります。 入力のテーブルが17万件で LIKE "system" の結果が1万件ですが Not Like "system" の結果は15万件になります。 テーブルを眺めてみてもよくわかりません。 抽出条件が不適切なのでしょうか? 正確な抽出方法をご存知の方いらっしゃいますか?

  • アクセスの抽出条件でvarchar型の否定方法がわかりません

    アクセスの抽出条件で、1でないレコードを表示したいのですが、int型の否定は<> 1 を使うようですが、 オラクルのvarchar型に対して否定するにはどうすれば良いでしょうか? Not "1"でも駄目でした。なお実際のデータはNULLになっています。

  • Access演算コントロールについて

    Accessの演算コントロール(演算列)で以下を行いたいと思っております。 ■条件 (1)フラグの立っている列のみ演算対象。無い場合はnull値を返す。 (2)フラグの立っている列:次回(カレントレコード)以降、 何回目のテストで今回の平均値を上回るかを演算フィールドに返す (3)テーブル名 テストM ID 教科 点数 平均点 フラグ 演算 1 国語  45   42   0   null 2 国語  40   43   0   null 3 国語  60   80   1   4  ・・・以降4回目のテストで今回の平均値を上回る 4 国語  30   45   0   null 5 国語  55   55   1   1  ・・・次回のテストで今回の平均値を上回る 6 国語  70   47   0   null 7 国語  100   50   0   null Dlookup関数で以下のように式を書きましたが、うまく結果が求められておりません。 =IIf([演算] Is Not Null,DLookUp("[ID]","テストM","[点数] >= " & ([平均点] And "[演算)]" Is Not Null))-[ID],Null) 上記の式で演算を行うとID3のレコード演算結果が「-2」(※1-3の結果) ID5のレコード演算結果が「-4」(※1-5の結果)になります。 VBAを使ってでも解決したいと思っております。 大変恐縮ですが、どなたかアドバイスでもご教授頂けますでしょうか? よろしくお願い致します。

  • Access2003 式ビルダでのLikeについて教えてください

    Acccess初挑戦の状態で困っております。 例えばデータベース内の名前で「山」の文字が含まれる名前を抽出させたい場合、「クエリの抽出条件でLike "*山*"」とすることで抽出できるのはわかるのですが、フォームでマクロの式ビルダを用いて同様の抽出を行いたいのです。 「顧客データ」のテーブルにある「お客様名」のフィールドから、「検索フォーム」の「名前検索」に入力されたキーワードを含むものを抽出させるために、以下の用に式ビルダで作成したのですが、 [顧客データ]![お客様名]=[Forms]![検索フォーム]![名前検索] 完全に一致する場合しか抽出してくれません。 データベース内に「山田 太郎」の名前があったとして検索フォームで「山田 太郎」と入力すると抽出されます。これを「山」と入力しただけで「山田 太郎」が抽出されるようにしたいのです。 Likeの演算子を用いてアスタリスクを使用すれば、できるのかなとは思うのですが、式ビルダへの記述方法がわかりません。 アドバイス頂ければ助かります。

  • ストアド内で動的にSQLを作る際のLIKE演算子シングルクォーテーションの数

    現在Access2003とSQLServer2005ExpressEditonで勉強中の者です。 ストアドプロシージャを動的に作成したいと思い 以下のページを参考に、NorthwindCS.adpはダウンロードせず 自前で簡単に環境を作ってストアドプロシージャをつくりテストに成功しました。 http://support.microsoft.com/kb/286828/ja そこで「もし検索対象のテーブルに摘要欄があり、"未"を含む検索をしたい場合はどうすればよいか」と思い、摘要フィールド(Varchar)を作成してストアドプロシージャに変数@TEKIYO(Varchar)を作り、以下の行を足しました。 ---------------------------------------------------------------- --摘要の検索条件がNULLかどうかを確認します。 --ここに値が含まれている場合WHERE句を作成します。 IF @TEKIYO IS NOT NULL BEGIN IF @SQLSTRING IS NOT NULL BEGIN SELECT @SQLSTRING = @SQLSTRING + ' AND TEKIYO LIKE ''%''' + @TEKIYO + '%''' END ELSE BEGIN SELECT @SQLSTRING = 'WHERE TEKIYO LIKE ''%''' + @TEKIYO + '%''' END END ---------------------------------------------------------------- adpの検索フォーム摘要欄に「未」と入力し実行ボタンを押すと「実行時エラー102 '未'付近に不適切な構文があります」と出てしまいました。 シングルクォーテーションの打ち方が間違っているのだろうと色々調べたり、打ち方を変えてみたりしたのですが、解決できず悩んでおります。 正解はどうなのでしょうか?教えてください。 なにとぞよろしくお願いいたします。

  • 異常?なカラムのデータについて教えて下さい。

    異常?なカラムのデータについて教えて下さい。 あるテーブルを全件出してみたところ、あぁNULLデータが入っているレコードがあるなーと気づきました。 抽出データには不要だったので“カラム IS NOT NULL”をしてみたのですがNULLデータを持ったレコードが排除できません。 別の方法で “カラム = ''” とか “カラム like '%%'” なんてやってみたのですがデータがNULLになっているものが排除できません。 これは不具合なのでしょうか?

  • Oracleのnull

    ちょっとオラクルの検索文で困ったことがでてきました。 temp ------- col1 col2 col3 と言うようなテーブルがあります。 select col1 || '(' || col2 || ')' as col from temp; というような検索文を作成しましたが、テーブルのcol1とcol2が両方とも nullのデータは'()'となってしまいます。 col1とcol2は片方だけがnullと言うことはありません。 col1がnullの場合はcol2もnullです。 このような場合col1とcol2がnullの時は、結果のcolもnullにしたいのですが どうしたら出来るのでしょうか? また、無理なら無理と教えてください。 よろしくお願いします。

  • ACCESS2003 クエリの抽出条件

    宜しくお願いします。 フィールド A A B B 1 セレナ ステップワゴン ・ ・ とあります。 抽出条件にてIS NOT NULLにすると空白以外表示されます。 セレナ以外の場合、IS NOT "セレナ"にするとセレナ以外になります。 クエリを実行する際、空白以外、セレナ以外、Aのみ、と一度で入力し、表示させたいのですが、どのようにすればよいでしょうか。 抽出条件を[抽出条件を入れてください]とし、 実行ボタンを押し、IS NOT NULLやNOT LIKE "セレナ"といれても何も表示されません。

  • LIKEを使用したレコード抽出について

    OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1  COL2 -------------- ABC==  12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC==';   ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。