0

(申し訳ありませんが、最初はこれが MySQL だと思っていました。DB が混同され、同時にあまりにも多くの DBMS で作業していました)

イベントの開始時刻と終了時刻の中間点を比較する必要があります。現在、右側に表示されている日付を HH:MM に変換しています。比較は真夜中まで機能します。

クエリは次のように述べています: pStart と pStop の間の WHERE 半分。

以下に示すように、pStart と pStap の日付は 2000 年 1 月 1 日です。これは、年月日が私にとって重要ではないためです...

有効なデータ:

 +-------+--------+-------+---------------------+---------------------+---------------------+
 | half  | pStart | pStop | half2               | pStart2             | pStop2              |
 +-------+--------+-------+---------------------+---------------------+---------------------+ 
 | 19:00 | 19:00  | 23:00 | 2012-11-04 19:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
 | 20:00 | 19:00  | 23:00 | 2012-11-04 20:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
 | 21:00 | 19:00  | 23:00 | 2012-11-04 21:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
 | 23:00 | 20:00  | 23:00 | 2012-11-05 23:00:00 | 2000-01-01 20:00:00 | 2000-01-01 23:00:00 |
 +-------+--------+-------+---------------------+---------------------+---------------------+

pStop が真夜中以降の場合に何が起こるかを観察してください...

それを破る有効なデータ:

+-------+--------+-------+---------------------+---------------------+---------------------+
| half  | pStart | pStop | half2               | pStart2             | pStop2              |
+-------+--------+-------+---------------------+---------------------+---------------------+ 
| 23:00 | 22:00  | 00:00 | 2012-11-04 23:00:00 | 2000-01-01 22:00:00 | 2000-01-01 00:00:00 |
| 23:30 | 23:00  | 02:00 | 2012-11-05 23:30:00 | 2000-01-01 23:00:00 | 2000-01-01 02:00:00 |
+-------+--------+-------+---------------------+---------------------+---------------------+

したがって、私のwhere句は次のように変換され ます。

質問:

これらの日付を整数間隔として表示して、pStart と pStop の間の半分が正しいと言う方法はありますか?

pStop が pStart よりも小さい場合に 24 を追加して 00:00 を 24:00 にすることを考えましたが、長い文字列の連結と数値変換なしで簡単に行う方法がわかりません。pStart pStop の差が 6 時間より長くなることはないため、これで問題は解決します。

注: (クエリははるかに複雑です。他にも無関係な日付計算がありますが、結果は上記のとおりです。DATE_FORMAT(%H:%i) は最初の 3 つの列に適用され、最後の 3 つの列には書式設定は適用されません)

ご協力いただきありがとうございます:

4

1 に答える 1

1

では、その日はあなたにとって重要ですか?

1 日ですべてを行ってめちゃくちゃにしてしまった場合、次のようになる必要があります。

WHere ((Start <= Stop) and ??)
Or
((Start > Stop) and ???)
于 2012-10-29T23:05:54.400 に答える