一つのテキストフィールドで抽出データを変えたい

このQ&Aのポイント
  • テキストフィールドを使用して複数の抽出条件を検索する方法について相談です。コードまたは名前で検索することができるようにしたいですが、現在は名前のみでの検索ができてしまいます。設定方法が間違っているのか、どうすれば両方の条件で検索できるようになるのか知りたいです。
  • 一つのテキストフィールドでコードまたは名前を使用して抽出データを検索したいです。現在は名前のみでの検索が可能ですが、コードでも検索できるようにしたいです。具体的には、コードが指定した値以上または名前が指定した文字列以上のデータを検索したいです。しかし、現在の設定では名前のみでの検索になってしまいます。どのように設定すれば両方の条件で検索できるようになるのか教えてください。
  • 一つのテキストフィールドでコードと名前の両方を使用して抽出データを検索したいです。現在は名前のみでの検索ができていますが、コードでも検索できるようにしたいです。具体的には、コードが指定した値以上または名前が指定した文字列以上のデータを検索したいです。しかし、現在の設定ではコードの検索がうまくいきません。正しい設定方法を教えてください。
回答を見る
  • ベストアンサー

一つのテキストフィールドで抽出データを変えたい

いつもお世話になっております。 早速ですが、一つのテキストフィールドで2種類の抽出条件を検索したいのです。 sql="select * from A where (code>='" & str &"' or name>='" & str &"')" のようにSQLへ問い合わせしております。 ユーザーが検索するときにcodeで検索かけるかmameで検索かけるか分からないので、どちらが入力されても検索できるようにしたいのです。 ちょっと変わったことをしていまして、codeが「0123」以上のものまたはnameが「あああ」以上のものを検索したいです。 sql="select * from A where (code='" & str &"' or name='" & str &"')" のように一意のものを検索することは出来ております。 また、それぞれ sql="select * from A where (code>='" & str &"')" sql="select * from A where (name>='" & str &"')" ではどちらも検索出来ております。 これを上記のようにORでくっつけるとnameのほうだけ検索可になりました。 設定方法が間違えていますでしょうか? わかる方がいましたら、ご協力お願いします。

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

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

>ただ、nameの英数字内に”-”(ハイフン)がのでこれで 判断できますでしょうか? というか、VBScriptなんでしょうか?言語を書いて頂かないと。 まぁ、それでもVBでもVBAでもVBSでも使えるInStr()が楽かな? InStr()で文字列中に特定の文字列があるか判断できますのでハイフンの有無で振り分けが可能かと。

015_dogi
質問者

お礼

taka_tetsu さんありがとうございます。 VBScliptでinstr()を試してみます。 がんばってみます。

その他の回答 (2)

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

>やはりSQLだけでは無理でしたか。 いえ、無理ではないんですが、普通しません。 caseを使えば可能です。 ただ、検索条件となる項目をいじるとなると、インデックスが張ってある場合、検索スピードに影響が出るのでやりません。 それに、こねくりまわしてSQLを作成したとしても、結局codeかnameかどちらを検索対象にするかは外部から与える必要があります。それを考えるとメリットは0ですね。 >条件の振り分けが難しいと思ったので・・・ codeかnameかを判断可能な項目は無いんですか? それでIfで振り分けるのが一般的なつくりかと。

015_dogi
質問者

お礼

taka_tetsuさんありがとうございます。 codeの場合8桁の数字になります。 nameの場合は英数字で長さは決まっておりません。 ただ、nameの英数字内に”-”(ハイフン)がのでこれで 判断できますでしょうか? ハイフンの位置が一意ではありませんが可能でしょうか?

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

>sql="select * from A where (code>='" & str &"' or name>='" & str &"')" これって、SQL文はプログラムで文字列連結して作ってるだけですよね。VBか、VBAか、VBScriptですよね。 無理やりSQLだけですることではないような。 単純に、codeが入力されていたら sql="select * from A where (code>='" & str &"')" を、 nameが入力されていたら sql="select * from A where (name>='" & str &"')" ってSQL文を文字列で作るだけですよね。 条件の振り分けはIfでやればいいわけだし。 あとは、codeとnameを両方指定されたときにどうするかだけかと思いますけど。

015_dogi
質問者

お礼

taka_tetsuさんご回答ありがとうございます。 やはりSQLだけでは無理でしたか。 条件の振り分けが難しいと思ったので・・・ もう一度プログラムを考え直して見ます。

関連するQ&A

  • アクセスの複数フィールドからの抽出について教えてください。

    「テーブル1」があり、「テーブル1」の中にフィールドA、フィールドB、フィールドC、フィールドDがあります。  その4つのフィールドの中のどれにも”あ”という言葉が含まれていないレコードを探しだしたいのですが、クリエでOR検索してもうまくいきません。  フィールドAに”あ”は無くても、フィールドBかフィールドCに”あ”といいう文字が含まれているものが出てきてしまいます。どうしてでしょう・・・  ちなみにSQL文は SELECT * FROM TABLE1 WHERE ((Not (TABLE1.フィールドA)="あ")) OR ((Not (TABLE1.フィールドB)="あ")) OR ((Not (TABLE1.フィールドC)="あ")) OR ((Not (TABLE1.フィールドD)="あ"));  となっています。明らかに初歩的な問題だと思われますが、初心者のため分からず困っております。  アドバイス、よろしくお願いします。

  • Oracl[10g]の SQL文について(No.7)

    何度も恐縮です。また、違った事が出てきました。(^^; 皆様にとっては、似たような事ばかりかと思いますが・・・ Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [A2]テーブルに[NO](key) [CODE1] と [CODE2] と [CODE3]フィールドがあるとします。 内容は、 1 A-1 A-2 (null) 2 A-2 A-1 A-3 3 (null)A-3 A-2 と、します。 結果が、 1 A-1 NAME-1 A-2 NAME-2 (null) (null) 2 A-2 NAME-2 A-1 NAME-1 A-3 NAME-3 3 (null/null)A-3 NAME-3 A-2 NAME-2 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? SELECT A1x.CODE1,A.NAME,A2x.CODE2, A.NAME,A3x.CODE3, A.NAME FROM A, (SELECT A.CODE, A.NAME, A2.CODE1 FROM A,A2 WHERE A.CODE=A2.CODE1 GROUP BY A.CODE,A.NAME,A2.CODE1) A1x, (SELECT A.CODE, A.NAME, A2.CODE2 FROM A,A2 WHERE A.CODE=A2.CODE2 GROUP BY A.CODE,A.NAME,A2.CODE2) A2x, (SELECT A.CODE, A.NAME, A2.CODE3 FROM A,A2 WHERE A.CODE=A2.CODE3 GROUP BY A.CODE,A.NAME,A2.CODE3) A3x WHERE A.CODE=A1x.CODE1 AND A.CODE=A2x.CODE2 AND A.CODE=A3x.CODE3 と、自分でチャレンジしたのですが、何も出てきません。 よろしくお願い致します。

  • SQL文の実行速度について

    こんにちは。SQLを勉強しています。 質問をさせてください。 Oracleテーブル(test_table:レコード数はかなりあると考えて構いません) にnumber(int),value(varchar), code(varchar)の3つのフィールドが存在 するとします。 今、codeを指定してvalueを取得したいと考えています。 (1)---------------------------- select value from test_table where code='001'; select value from test_table where code='002'; select value from test_table where code='003'; (2)---------------------------- select code, value from test_table where code='001' or code='002' or code='003' (1)と(2)ではどちらが実行速度が速いのでしょうか? 実際に実行すればわかることですが、そういった環境が ないので、確認できません。宜しくお願い致します。

  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • Oracl[10g]の SQL文について(No.8)

    何度も恐縮です。前回の質問の続きとなるかと思いますが・・・ Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [A2]テーブルに[NO](key) [CODE1] と [CODE2] と [CODE3]フィールドがあるとします。 内容は、 1 A-1 A-2 (null) 2 A-2 A-1 A-3 3 (null)A-3 A-2 と、します。 結果が、 1 A-1 NAME-1 A-2 NAME-2 (null) (null) 2 A-2 NAME-2 A-1 NAME-1 A-3 NAME-3 3 (null/null)A-3 NAME-3 A-2 NAME-2 と、なる様にする為のSQL文は、 >select a2.no, a2.code1,a_1.name, a2.code2,a_2.name, a2.code3,a_3.name >from a2, >(select code, name from a) a_1, >(select code, name from a) a_2, >(select code, name from a) a_3 >where >a2.code1 = a_1.code(+) and >a2.code2 = a_2.code(+) and >a2.code3 = a_3.code(+) と、教えて頂き、完成致しました。 これを、アレンジして、 SELECT A2.NO, A2x.N1, A2x.N2, A2x.N3 FROM A,A2 , ( select a2.no, a2.code1,a1x.name AS N1, a2.code2,a2x.name AS N2, a2.code3,a3x.name AS N3 from a2, (select code, name from a) a1x, (select code, name from a) a2x, (select code, name from a) a3x where a2.code1 = a1x.code(+) and a2.code2 = a2x.code(+) and a2.code3 = a3x.code(+) ) A2x WHERE A2.NO='1' GROUP BY A2.NO, A2x.N1, A2x.N2, A2x.N3 ORDER BY A2.NO と、作りました。つまり、 1 A-1 NAME-1 A-2 NAME-2 (null) (null) と、言う結果が欲しいのです。 ところが、 1 (null) NAME-3 NAME-2 1 NAME-1 NAME-2 (null) 1 NAME-2 NAME-2 NAME-3 と、3行も出てしまいます。 よろしくお願い致します。

  • OraclのSQL文について(No2)

    前回の質問の続きとなります。 Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 結果が、 A-1 NAME-1 300 A-2 NAME-2 1200 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? SELECT A.CODE, A.NAME, B.KIN FROM A, B WHERE A.CODE = B.CODE ORDER BY A.CODE と、すると A-1 NAME-1 100 A-1 NAME-1 200 A-2 NAME-2 300 A-2 NAME-2 400 A-2 NAME-2 500 と、言う結果がでます。(当然ですが) しかし、 SELECT A.CODE, A.NAME, A2.KIN FROM A, A2 WHERE A.CODE = A2.CODE GROUP BY A.CODE,A.NAME ORDER BY A.CODE と、すると[GROUP BYの式ではありません]と、エラーになってしまいます。 (SUM文以前の問題でした) よろしくお願い致します。

  • EXSIST述語を使った副問合わせについて

    SELECT HINMOKU_NAME FROM HINMOKU WHERE HINMOKU_CODE IN (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE = '2004-11-10'); 上記をSQL文をEXISTS述語を使って書き換えると エラーが出てしまい、うまく書き換えがすることが できません。下記にエラーがでるSQL文を記載いたします。 SELECT HINMOKU_NAME FROM HINMOKU WHERE EXISTS (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE ='2004-11-10' WHERE HINMOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE); 上記SQL文についてどこに問題があるのか、ご教授お願い致します。

  • SELECTのスピード

    SELECTのスピードでどの方法が 検索スピードが速いのか教えてもらいたいのですが Aのテーブル DENNO CODE Bのテーブル CODE NAME Aのテーブルを主にAのCODEでBのテーブルを参照したい時 (1) SELECT A.DENNO,A.CODE, (SELECT B.NAME from B where A.CODE=B.CODE) AS NAME from A (2) SELECT A.DENNO,A.CODE,B.NAME FROM A LEFT JOIN B ON A.CODE=B.CODE (3) SELECT A.DENNO,A.CODE,B.NAME FROM A , B WHERE A.CODE=B.CODE(+)

  • 複数フィールドの条件について

    SQL文について教えてください。 oracle,mysqlでは、下記の条件分 where (fieldA,fieldB) in (select fieldA,fieldB from TABLE_NAME) と言った条件を記載可能なのですが、SQLServer ではエラーになってしまいます。 違った構文があるのでしょうか?よろしくお願いします。 具体的にやっているSQLは update TABLE_NAME set FIELD_NAME='1' where (FIELDA,FIELDB) in (select FIELDA,FIELDB from TABLE_NAME2 where FIELDC='1')

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。