日付期間の比較: フォーム入力された時間がDBデータの範囲に入るか判定する方法

このQ&Aのポイント
  • フォームから入力された時間値が、DBデータの範囲に入るかどうかを判定する方法を教えてください。
  • 特定の時間値が、DBデータの範囲内にある場合は、Check_Flg変数に1を格納し、範囲外の場合は0を格納する方法が知りたいです。
  • 現在の条件文ではコンパイルエラーが出てしまっています。上手く判定するための正しい条件文を教えてください。
回答を見る
  • ベストアンサー

日付期間の比較

フォームから入力されたForm_timeに格納されている"900"という時間を表す値が、 DBデータの"900"という値と、"1000"という値の範囲に入るがどうかを判定して、 範囲内であればCheck_Flgという変数に1を格納、 範囲外であれば0を格納するよう処理を分岐したいのですが、肝心のIf条件内容を上手く書けないんです。 If (Cint(Form_time) = (Between rs("DB_STARTTIME") And rs("DB_ENDTIME"))) Then Check_Flg = 1 Else Check_Flg = 0 End If 「')' がありません。」と、コンパイルエラーが出てしまうんです... どうしたら、上手く判定出来るんでしょうか???

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

  • ベストアンサー
noname#4564
noname#4564
回答No.1

ANSI SQLにはBetweenという予約語がありますが、VBやVBSにはBetweenという予約語や演算子はありません。 > If (Cint(Form_time) = (Between rs("DB_STARTTIME") And rs> > ("DB_ENDTIME"))) Then > Check_Flg = 1 > Else > Check_Flg = 0 > End If If (Cint(Form_time) >= rs("DB_STARTTIME")) _ And (Cint(Form_time) <= rs ("DB_ENDTIME")) Then   Check_Flg = 1 Else   Check_Flg = 0 End If とすればよいでしょう。 更に、 Check_Flg = Abs((Cint(Form_time) >= rs("DB_STARTTIME")) And (Cint(Form_time) <= rs ("DB_ENDTIME"))) とすればIf条件分岐も要らなくなりますが、これはちょっとトリッキーな書き方なので、可読性の面でお奨めできないかも?

Kalen_F
質問者

お礼

有難うございます。 範囲という事で、Betweenに懲り固まっていたようですね(^^ゞ 早速試してみます!

関連するQ&A

  • MySQLの日付型データをBetweenで抽出する方法

    MySQL で格納したデータを Perl を使ってブラウザに出力したいのです が、日付型で格納したデータを Between で範囲を指定して出力しても 条件通り出力できません。 Between 式が間違っているまでは把握しているのですが、修正方法が 分かりません。どなたか教えていただけませんか? # $form->param('combo1')は、2006 が格納されている $date1 = $form->param('combo1') . "/04/01"; $date2 = $form->param('combo1')++ . "/03/31"; # $date1 の値は、2006/04/01 # $date2 の値は、2007/03/31 $sql = "SELECT Itaku_Date FROM table WHERE "; $sql .= "Between " . $date1 . " And " . $date2;

  • 変数の比較

    (1)FORMで入力した値($form)を次のページで表示する。 (2)DBからデータを取得し、配列($dbdata[])に入れる。 (1)と(2)を比較したいのですが、一向に上手くいきません。 if( $dbdata[2] == $form ) { print "一致<BR>"; }else{ print "不一致<BR>"; } こういう風に行っているのですが、なにかおかしな点はありますでしょうか?

    • ベストアンサー
    • PHP
  • 期間集計を日別集計にしたい

    DBはアクセス(.mdb)です。 現在のSQL構文です。。。 strSQL = "SELECT COUNT (*) From DB1 " strSQL = strSQL & "where 条件その1 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 条件その2 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 日時 BETWEEN #" & (開始日時を格納した変数) & "# AND #" & (終了日時を格納した変数) & "#" rs.Open strSQL, cn SU = rs.Fields(0).Value 上記のPGで変数「SU」に、SQL文で設定した条件に該当 するレコード数を代入していますが、これではあくまで 開始日時と終了日時の間に存在するトータルレコード数 、言わば「期間合計」になってしまいますよね。 現在行いたい内容ですが、開始日時と終了日時の間の日 付を1日ごとに分割し、その1日ごとでのレコード数が分 かる、「日別合計」処理をさせるようにしたいのですが。 やっぱり上記のSQL文を根本から考え直さないと出来ない でしょうか?出来れば、なるべく残しつつ、後の方で加工 できればいいなぁと思っているんですが。。。 よろしくお願いします。

  • 日別集計(その2)

    DBはアクセス(.mdb)です。 現在のSQL構文ですが、、、 strSQL = "SELECT COUNT (*) From DB1 " strSQL = strSQL & "where 条件その1 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 条件その2 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 日時 BETWEEN #" & (開始日時を格納した変数) & "# AND #" & (終了日時を格納した変数) & "#" strSQL = strSQL & "GOROUP BY CDate(Fix(日時)) " rs.Open strSQL, cn SU = rs.Fields(0).Value という内容です。 これを実行すると”1日目”は取れるのですが、2日目 以降が取れません。単純に「SU = rs.Fields(0).Value」 ではなくWhile等でまわしてやればうまくいくでしょうか? それと、、、これは私も予想外だったのですが(汗)1日 を更に2分割(例:8:30~20:29までと20:30~8:29) しなければなりません。DBの日時フィールドは時刻/日付 型なんですが、これをうまく使ってクエリをもう少し細か なものにしたいのです。 お知恵をお借りしたいと思います。 よろしくお願いします。

  • PHPで素数を表現に関するご質問

    PHPで素数を表現する際に関しての質問です。 ■知りたい点 下記のコードで、iが3の時、 for($j =3; $j < $i; $j++){ の $j < $i の動作の仕方がわかりません。 3 < 3 だから、条件に反する。よって処理なし? とか考えてしまっています。 どのような、解法をしているのでしょうか。 お手数をお掛けしますが、よろしくお願い致します。 P.S すみません。質問があいまいで答えずらいかと思います。。。 <?php //関数の呼び出し sosuu_check(); //素数を表示する関数 function sosuu_check() { //1~100までを繰り返す for($i=1;$i<=100;$i++) { //1以下の場合は次の値をチェックする if($i < 2) { continue; } //2の場合は素数なので表示して、次の値をチェックする。 if($i == 2) { print $i . ":"; continue; } //偶数の場合は素数ではないので、次の値をチェックする。 if($i % 2 == 0) { continue; } $flg = "0";//割り切れたか判定するフラグ変数 //今の値は1と今の値以外では割れてはいけない。 for($j = 3;$j < $i; $j++){ //割れてしまったら素数ではないので次の値をチェックする。 if($i % $j == 0){$flg = "1";break;} } //割れなかった場合は素数なので表示する。 if($flg == "0") { print $i . ":"; } } } ?>

    • ベストアンサー
    • PHP
  • VBScriptについて

    VBScriptで現在このようなプログラムを書いています。 これで実行すると、空欄の場合もメッセージがでてしまいます。 そこで、空欄にはメッセージがでないようにしたいのですが・・・ どのように記述すればよいのか教えてください。 If IsNumeric(Request.Form("kiso")) Then rs.Fields("KISO").Value = CInt(Request.Form("kiso")) Else strMessage = strMessage & "<br>" & "基礎は数値で入力してください" End If

  • Boolean型配列中のTrueの有無を判定したい(VB2005)

    VB.NET2005についての質問です。 Dim hoge(5) as Boolean  '値が格納済みとする Dim flg as Boolean 配列hogeの要素の中に、一つでもTrueがあったら、flgにTrueを格納する処理を考えています。 現在はhogeをループで回してTrueの有無を判定していますが、ループを使わず、もっと簡単に上記の処理を行うことは可能でしょうか。 例えば   flg = 処理(hoge) などといった形で処理ができれば理想的です。 どうぞよろしくお願い致します。

  • 日付の最大値を求めるには

    DLookup関数と、DMAX関数を組み合わせて、検索をすれば良いのですが、 表示する項目が多い為、DAOを使って検索を考えています。 検索するコードが複数存在し、最大の日付のレコードを表示 したいと思っています。 コードの名称は・・・ Quotation_B_Noです。 日付が入っている名称は Input_dayです。 フォーム内のMe.W_Revise_Noにコードを入力して、検索を行います。 検索するテーブルは、T_Quotation_B_request_received_tableです。 この中にある。 コードを最初にあるか、どうかをチェックして、 あれば、そのコードに対する、最大の日付のレコードを 検索したいと思っています。 現在、このように組みましたが、 Dim db As DAO.Database Dim rs As DAO.Recordset Dim han As Date Set db = CurrentDb() Set rs = db.OpenRecordset("T_Quotation_B_request_received_table", dbOpenDynaset) rs.FindFirst "Quotation_B_No ='" & Me.W_Revise_No & "'" If rs.NoMatch = True Then MsgBox "Not found Supplier code" Cancel = True Me.W_Revise_No.Undo Exit Sub Else han = DMax("Input_day", "T_Quotation_B_request_received_table ", "Quotation_B_No ='" & Me.W_Revise_No & "'") rs.FindFirst "#" & "han" & "#" And "Quotation_B_No ='" & Me.W_Revise_No & "'"→ここで、エラーが発生します。 Me.W_Control_No = rs!Control_No       ・・・・・ End If rs.Close Set rs = Nothing db.Close Set db = Nothing どのように組めば良いのか、さっぱり分かりません。 ご指導、宜しくお願いします。

  • ジャバスクリプトを入れるとCGIエラーが出てします。

    下記のような感じでプログラムしてみたのですがどうしてもCGIエラーが出てしまいます。 何か打開策などございましたら教えて頂けないでしょうか?お願いします。 $Head=$Head.qq{ <script> function send(){ //どのラジオボタンがチェックされたか判定 var i; if (document.form_a.r_b.length) { for (i = 0; i < document.form_a.r_b.length; i++) { if (document.form_a.r_b[i].checked) { var ck_b = document.form_a.r_b[i].value; } } } else q{ if (document.form_a.r_b.checked) { var ck_b = document.form_a.r_b.value; } } //チェックされたボタンから遷移先を分ける if(ck_b=="A"){ document.form_a.action="http://www.***.co.jp/cgi-local/J_S001.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); }else if(ck_b=="B"){ document.form_a.action="http://www.***.co.jp/cgi-local/H_S001.cgi?ff_flg=2&day_flg=1&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } else if(ck_b=="F"){ document.form_a.action="http://www.***.co.jp/cgi-local/SearchJobOffer1b.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } } </script> };

  • mysqlから出した値(日付)の変換

    いつも勉強させていただいております。 どなたか下記の件でわかるかたいらっしゃいましたら、ご助力 お願いいたします。 DB内に格納されている時間データが24:00を超えたときに 日付が変わるようにするにはどうしたらいいでしょうか? 例 +-----+----+ | 日付 | 時間 | +-----+----+ |05-13| 2200 | +-----+----+ |05-13| 2300 | +-----+----+ |05-13| 2400 |→ここからブラウザで表示するときに +-----+----+ 05-13を05-14にしたい。 |05-13| 2500 | DBはこのままでOKです。 +-----+----+ |05-13| 2600 | +-----+----+ 前提として、この時間は予約システムなんで、 22:00から5時間と入れると、 22:00~27:00までDBに勝手にテーブルを作ります。 mktime関数に入れられれれば if文で時間の値が2400を超えたときに"d"+1と出来るんですが、 どなたかご教授いただければ幸いです。 よろしくお願いいたします。 仕様 php4.4.7 mysql4.0.24 これはクライアントの仕様と同等なためです。

    • ベストアンサー
    • PHP

専門家に質問してみよう