- ベストアンサー
スペース区切り
If name1<>"" Then SQL = SQL & " AND name1 LIKE '%" & name1 & "%'" これで、スペース区切りでも検索できるようにするには? テキストなど見てみるとすごく長くなってしまってるんですが、 簡潔に記述できるものはないでしょうか? よろしくお願いいたします~。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>これは、もう何もbetweenなど範囲の指定?など >しなくてもいいのでしょうか? 出版年の上限と下限が必ず入力されるのであれば SQL = SQL & " AND 出版年 between " & shuppan1 & " and " & shuppan2 でOKです. 先の例は入力フォームで片方,あるいは両方が空白のまま送信された場合を考慮して,わざわざIf文を付けています.
その他の回答 (7)
- picchio
- ベストアンサー率100% (2/2)
# 入力フォーム側の名前とは # <input name="shuppan1" type="text">以降 # <input name="shuppan2" type="text">以前 # のことでよろしいですよね? name="名前" の形で記述した部分です. <input type="text"> がテキストボックスを表し それに名前を付けたりサイズを指定する場合は <input name="namae" type="text" size="10"> のように書きます. 最初の質問内容である絞込みの回答から 派生した質問が次々と出て来て収集が付かなくなりつつあるので,一旦この辺で区切りを付けて,新たな質問は別途改めてと言うことでいかがでしょうか?
お礼
そうですね。 有り難うございました! 感謝いたします!!
- picchio
- ベストアンサー率100% (2/2)
>shuppan11= Request.QueryString("shuppan1") >shuppan2= Request.QueryString("shuppan1") Request.QueryStringで受け取ることが出来るのは,フォームからgetで送られた値です. postならRequest.Formになります. 入力フォームの出版年を入れるところが <input name="shuppan1" type="text">以降 <input name="shuppan2" type="text">以前 のようになっているとして shuppan1 = Request.QueryString("shuppan1") shuppan2 = Request.QueryString("shuppan2") で受け取れます. 偶然にもデータベース側の出版年がshuppan1と言う名前なのでしたら shuppan11 = Request.QueryString("shuppan1") shuppan2 = Request.QueryString("shuppan2") としても良いですが,入力フォーム側の名前がどうなっているのか確認してください.
補足
入力フォーム側の名前とは <input name="shuppan1" type="text">以降 <input name="shuppan2" type="text">以前 のことでよろしいですよね?
- picchio
- ベストアンサー率100% (2/2)
>1990年から1995年に出版された資料に限定する。という方法も >上記のやり方で可能でしょうか? 数値の比較になるので,文字列検索のLIKEとは違いますね. 検索文字列をname1に格納したように,出版年の下限をshuppan1 上限をshuppan2とでもして If shuppan1<>"" Then SQL = SQL & " AND 出版年 >=" & shuppan1 End If If shuppan2<>"" Then SQL = SQL & " AND 出版年 <=" & shuppan2 End If のようにしてみてください.
補足
ご丁寧に、 有り難うございます。ペコリ。 これは、もう何もbetweenなど範囲の指定?など しなくてもいいのでしょうか? すいません、よく理解していないもので(^^;)
- picchio
- ベストアンサー率100% (2/2)
>『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか? 全角スペースを半角スペースに置換してからSplitで出来ると思います. If name1<>"" Then name1Tmp = Split(Replace(name1," "," ")," ") For i = 0 to UBound(name1Tmp) SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'" Next End If
お礼
最終形態は、そのようにしたいと考えております。 お忙しいところ、私などの質問に答えていただき本当に有り難うございます。
補足
す・・すごいです。勉強になります有り難うございます! 心よりお礼申し上げます。 あと、最後にひとつだけ教えていただきたいところがあるのですが、、、 http://kototoi.dl.itc.u-tokyo.ac.jp/opac/help/expart-help.html ここの出版年のところの、 ← 1990年から1995年に出版された資料に限定する。という方法も 上記のやり方で可能でしょうか?
- picchio
- ベストアンサー率100% (2/2)
こんな感じでどうでしょうか? If name1<>"" Then name1Tmp = Split(name1," ") For i = 0 to UBound(name1Tmp) SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'" Next End If
補足
うおお~!できました!有り難うございます(泣) あとおひとつ、お伺いしてもよろしいでしょうか?(汗) 『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか? 度重なる質問で、申し訳ございません。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 条件側が「スペース区切り」で、いわゆる「絞り込み検索」ですね。 この場合、検索条件をスペースで区切って、それぞれ変数に入れなければいけません・・・。 そして、変数が「NULL」でない場合だけ、ANDでWHERE句を足していきましょう。 "東京 お台場"と入力。 変数(または配列でも可)に、スペース区切りで代入(この時、スペースを削除する)。 それぞれの変数(または配列のN番目)がNULLでない場合のIF文で、AND条件をくっつける。 こんな感じかと思います。 なんとなくわかります? (^^ゞ
お礼
ご丁寧に有り難うございます!
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 >>これで、スペース区切りでも検索できるようにするには? データと検索条件の相関関係をもう少し具体的にお願いします。 後、「スペース区切り」とはどのような状況ですか? (^^ゞ
補足
早速レスいただき、有り難うございます(^_^) スペース区切りですけど、 例えですけれども、"日本東京お台場"という文字があるとします。 検索をかける際に "東京 お台場"と入力しても、"東京日本お台場"が出るようにしたいのです。 ご指導よろしくお願いいたします~!
お礼
省略ですが、簡単な流れです・・ 点線で区切ってますが、すべてつながっています。 '入力フォームの内容を取得、変数に代入 pass1= Request.QueryString("pass1") shuppan11= Request.QueryString("shuppan1") shuppan2= Request.QueryString("shuppan1") '------------------------------------------------ 'データベースと接続 Set db = Server.CreateObject("ADODB.Connection") db.Open "nedandb" SQL = "SELECT * FROM nedandb WHERE id 'IDが入ってないとSQL文が発行されない '------------------------------------------------ 'MDBから抜き出してきたいフィールド名は『shuppan1』 '『shuppan11』~『shuppan2』に入力した数字を検索したい If shuppan11<>"" Then SQL = SQL & " AND shuppan1 >=" & shuppan11 End If If shuppan2<>"" Then SQL = SQL & " AND shuppan1 <=" & shuppan2 End If '------------------------------------------------ SQL = SQL & " ORDER BY hp_date DESC" '日付の新しい順に並べる 'SQL文を実行してレコードセットを取得 Set rs = db.Execute(SQL) %> '------------------------------------------------ '検索結果の表示 SQL : <%= SQL %><P> 検索条件 本:"<%= nedan11 %>" こんな感じの記述です。 どうも、この記述ですとSQL文が発行されないのです。 しかし、 If namae<>"" Then namaeTmp = Split(Replace(namae," "," ")," ") For i = 0 to UBound(namaeTmp) SQL = SQL & " AND namae LIKE '%" & namaeTmp(i) & "%'" Next End If namaeだけだと namae= Request.QueryString("namae") と指定しやすいのでできています。 もしかして、この変数の時に私の設定が間違えているのかと考えたのですが いろいろやっても解決されませんでした。。 長くてすいません。
補足
なるほど…有り難うございます! > >If shuppan1<>"" Then > SQL = SQL & " AND 出版年 >=" & shuppan1 >End If > >If shuppan2<>"" Then > SQL = SQL & " AND 出版年 <=" & shuppan2 >End If でやろうと思います。 DBはMDBで、MDBの・・・出版年のフィールド名のところは、"shuppan1"という名前になっているのです…。 これでは、 If shuppan1<>"" Then SQL = SQL & " AND 出版年 >=" & shuppan1 End If の、shuppan1という名前が重なってしまってるんで"shuppan1"を"shuppan11"としました。(もちろんテキストの名前も変更しています。) が検索されません。 説明といたしましては textに入れた名前からmdbを呼びに行くのは shuppan11= Request.QueryString("shuppan1") shuppan2= Request.QueryString("shuppan1") という風に変えてやっているのですが、 クエリを呼び出す際に何も反応がおこりません。 やはり、どこか変数が間違っているということなんでしょうか? これだけで推測不可能(だと思いますが…)でしたら、何なりとお申し付けください。