• ベストアンサー

指定した時間を除くためのテーブル設計について

今趣味でかんたんなシステムを作ってみています。 その中でメール配信を行う部分があるんですが、 指定した時間帯はメール配信が行われないようにしたいです。 とりあえず、ユーザごとに配送しない開始時間と終了時間を持たせて(time型hh:mm:ss)やろうとおもいましたが、sqlでうまく範囲指定ができません。 23(end)-7(sta) とかだったら sta <= now <=end で簡単なんですが、 1(end)-7(sta)だと うまくいきません。 それぞれの時間帯ごとの可否フラグをもつしかないですか?

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

N02回答者です ん?投稿後によく見たら `sta`<=`end` がfalseの時の 不等号が逆だった if( `sta`<=`end` , CURTIME() between `sta` and `end` , CURTIME()>=`sta` or CURTIME()<=`end` )

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

開始と終了ともに 00:00:00 ~ 23:59:59 で指定するけど、 開始>終了 という条件の時は、開始~23時、と 0時~終了時刻 のデータを取り出すでいいのかな? if関数で条件切り分け記述するとよいでしょう。 select * from `timetable` where if( `sta`<=`end` , CURTIME() between `sta` and `end` , CURTIME() <=`sta` or CURTIME() >=`end` ); /* table名は適宜, between は両端含むので >=, <= と同じ */

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いまいち仕組みがよく理解できませんが・・・ staよりendが小さいときはstaから24までと、0からendまでの 両方を条件としすればよいのでは?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 時間の計算の方法

    2つのStr(time1、time2)に「yyyy/mm/dd hh:mm:ss」の形で データが入っていて、time2 - time1をtime3に「hh:mm:ss」に フォーマットして入れたいのですが、 VBの場合、  new1 = CDate(time1)  new2 = CDate(time2)  new3 = new2 - new1  time3 = Format(new3, "hh:mm:ss") で可能だと思いますが、ASPの場合はどのようにすればいいのですか? Formatを認識しないらしく、文字化けしてしまうので、 どなたか教えてください。よろしくお願いします。 まだASP歴、3日目なもので。。。。

  • エクセル 時間の合成

    インターバル = TimeValue("00:50:00") 早速ですが インターバル = TimeValue("00:50:00") Debug.Print Now + インターバル これは エラーになりません。 しかし If Format(Now, "hh:mm:ss") < Format("3:00:00", "hh:mm:ss") Then 終了時刻 = Format(Now, "yyyy/mm/dd") & " " & TimeValue("3:02:00") Else 終了時刻 = Format(DateAdd("d", 1, Now), "yyyy/mm/dd") & " " & TimeValue("3:02:00") End If Debug.Print 終了時刻 + インターバル これは、型が合わないエラーです。 終了時刻は 文字列的に合成されただけ・・・だろうと 推察するのですが では、「終了時刻 + インターバル」 が 可能な終了時刻は どうして 作ればいいのでしょうか?

  • ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています

    <エラーメッセージの内容> ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています 開発言語は、java,oracle10g express editionです スケジュールを登録する画面のところの日付のインサートで失敗します。「→」の部分です。 <以下のSQLをSQL/PLUSで実行するとうまくいきます> insert into schedule values(1, 1, '予定1', '予定1です', TO_DATE('2009-06-01 10:00','YYYY/MM/DD HH24:MI:SS') , TO_DATE('2009-06-01 12:00','YYYY/MM/DD HH24:MI:SS'), 'A社', '予定1のコメントです。',1); <問題のソースコード> * スケジュール情報をデータベースに新規保存する public void create(Schedule schedule) { String sql = "insert into " + SCHEDULE_TABLE_NAME + " (id, user_id,subject,content, start_time, end_time, place, comment1, is_publish) values(?,?,?,?,?,?,?,?,?)"; Connection con = null; try { con = createConnection(); con.setAutoCommit(false); int id = getNextId(con, SCHEDULE_TABLE_NAME); PreparedStatement stmt = con.prepareStatement(sql); →stmt.setString(5,toString(schedule.getStartTime())); →stmt.setString(6, toString(schedule.getEndTime())); * 日付を文字列表現(yyyy-MM-dd HH:mm)に変換する private String toString(java.util.Date date) { SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm"); →return "TO_DATE('"+"'"+sd.format(date)+"'"+",'YYYY/MM/DD HH24:MI:SS'"+")"; } ネット、本などでいろいろ調べましたが、わからなかったので、ヒントになることでもいいので、ご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセル Worksheet_Calculate

    Worksheet_Calculate()  ですが、A:4 から h:4 だけ 反応する。 それ以外は、 Exet Sub で Calculate を 抜ける。 この範囲指定の方法は無いでしょうか 時間なら 下記で事足りるのですが If Format(Time, "hh:nn:ss") < Format("9:00:00", "hh:nn:ss") And Format(Time, "hh:nn:ss") Format("3:00:00", "hh:nn:ss") Then Exit Sub End If

  • 時間のフォーマット

    数値を時間(HH:MM:SSやAM/PM HH:MM:SS)にフォーマットしたいのですが、どのようにコーディングすればよいのでしょうか? SimpleDateFormatクラスを使用して試みているのですが、 どうしてもできません・・・ 例)131214 → PM 1:12:14

    • ベストアンサー
    • Java
  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、

  • 131071秒を関数で日付と時間にするには?

    数値(秒)をエクセルで時間に換算しています。 24時間を超えた時、「○日HH:MM:SS」 のようにエクセルで表記できますか? 32767は、9:06:07 65535は、18:12:15 ここまでは書式設定を時間([$-F400]h:mm:ss AM/PM)にするだけで済みます 更に数値行を追加し、 131071 262143 524287 1048575 ... 9007199254740990 となったとき、どうしたら良いでしょうか? お分かりの方、どうぞよろしくお願いいたします。 ○日HH:MM:SS、 ○年○日HH:MM:SS のように関数をコピペして計算表示していきたいです。 Windows8pro Office2013のエクセルです。よろしくお願いいたします。

  • Date型の範囲を超える数値について

    経過時間を求めるときに、 dim Time as Date dim Keika as Date Keika = Now - Time Keika = Format(Keika, "hh:mm:ss") でよいと思うのですが、経過時間が24時間以上になる可能性のある プログラムはどのように書けばいいのでしょうか? 例えば、53:49:12のように計算したいのですが。 Date型は23:59:59の範囲しかダメなんですよね・・・・。

  • タイムスタンプを時間に変換

    getTime()メソッドが返した値の、右の3つの数字を消すとタイムスタンプが得られました。1970年からの経過秒らしいです。 このタイムスタンプから yyyy/mm/dd hh:mm:ss のような年月日の表示にしたいのですが、簡単にできる方法はありませんか? i=1189382252 str="" //タイムスタンプを時間に変換 alert(str)

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。