1

mysql クエリに問題があり、関連するものが見つからないようです。

テーブルに「日付」という日付列があります。形式は「YYYY-MM-DD HH:MM:SS」です。

数日にわたってすべてのデータをカウントしようとしていますが、日付が 08:30:00 から 18:30:00 の間の場合のみです。

HOUR(date) の使用方法は知っていますが、分をクエリに統合する方法がわかりません。

ケースの使用を考えていましたが、よくわかりません。

どんな助けでも素晴らしいでしょう。

よろしく、チェスク。

私が行ってきたクエリで編集します。

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014
AND HOUR(date) between 08 and 19
group by YEAR(date), MONTH(date), DAY(date);
4

4 に答える 4

5

時間比較のために 30 分を引くことをお勧めします。

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014 AND
      HOUR(date - interval 30 minute) between 08 and 17
group by YEAR(date), MONTH(date), DAY(date);

間隔が 18:30:00 の直前 (たとえば、18:29:59.999) で終了すると仮定すると、上限は 17 であることに注意してください。

これは次のようにも表現できます。

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014 AND
      TIME(date) BETWEEN TIME('08:30:00') and TIME('18:30:00')
group by YEAR(date), MONTH(date), DAY(date);
于 2014-12-29T16:04:13.233 に答える
3

関数を使用すると、これは見た目よりも簡単ですTIME()

SELECT COUNT(*), DATE(`date`)
  FROM table
 WHERE TIME(`date`) BETWEEN '08:30' AND '18:30'
 GROUP BY DATE(`date`)

8:30 から 18:30 までが必要な場合は、代わりにこれを使用します。BETWEEN時間範囲に使用すると、オフバイワンエラーが発生することで有名です。

SELECT COUNT(*), DATE(`date`)
  FROM table
 WHERE TIME(`date`) >= '08:30'
   AND TIME(`date`) <  '18:30'
 GROUP BY DATE(`date`)
于 2014-12-29T16:10:20.553 に答える
1

試す:

WHERE DATE_FORMAT(date, '%Y %h:%i') BETWEEN '2014 08:30' AND '2014 18:30'
于 2014-12-29T16:06:42.287 に答える
0

同様に使用MINUTE(date)します:

WHERE (HOUR(date) = 8 AND MINUTE(date) >= 30) OR     # 08:30 - 09:00
      (HOUR(date) > 8 AND HOUR(date) < 18) OR        # 09:00 - 18:00
      (HOUR(date) = 18 AND MINUTE(date) <= 30)       # 18:00 - 18:30
于 2014-12-29T16:01:03.490 に答える