mysql查询,它将查找一个月的最后一个小时内的所有datetime条目

31moq8wy  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(252)

我正在尝试获取mysql数据库中的所有记录 datetime 列的值在任何月份的最后一个小时内(即1月31日23:00-23:59,2月28日23:00-23:59)等。
有没有一种不用写一堆“between”语句就可以编写查询的方法?
假设我有下表:

id | createtime 
-------------------------
 1 | 2018-01-30 23:37:11
 2 | 2018-01-31 22:00:00
 3 | 2018-01-31 23:37:11
 4 | 2018-02-28 22:00:00
 5 | 2018-02-28 23:33:00

我想要一个可以选择行的查询 3 以及 5 (分别是一月和二月的最后一个小时)。

smdnsysy

smdnsysy1#

虽然对于数据的加载来说,这并不是真正的性能,但是可以选择使用不同的日期/时间函数来实现这一点:
您可以使用以下简单的行进行测试:

SET @mytime = "2018-09-30 22:59:59"; 
SELECT 
  @mytime, 
  LAST_DAY(@mytime), 
  HOUR(@mytime), 
  DAY(@mytime), 
  DAY(LAST_DAY(@mytime)), 
  IF(DAY(LAST_DAY(@mytime)) = DAY(@mytime) AND HOUR(@mytime) = 23, 1, 0) AS is_final_hour
;

只需使用在开头设置的datetime变量就可以看到不同的结果。
之后,您可以在如下查询中使用它:

SELECT
  t.mydatetime,
  IF(DAY(LAST_DAY(t.mydatetime)) = DAY(t.mydatetime) AND HOUR(t.mydatetime) = 23, 1, 0) AS is_final_hour
FROM
  mytable AS t
HAVING
  is_final_hour = 1
;

相关问题