MySQL 查詢固定時間段的資料

2021-09-13 21:03:42 字數 2063 閱讀 6758

今天想用mysql查點東西,需求如下:

查一周時間內的每天上午9點到11點半和下午1點到3點的所有資料。

資料庫表結構比較簡單,就是zabbix的預設資料庫表結構,查一下歷史資料表。

history_uint 表結構如下:

欄位名型別

備註itemid

bigint

監控項id

clock

intepoch時間戳(unix時間戳),精確到秒

value

bigint

監控項的值

nsint納秒

直接貼sql吧,貼完再說思路:

select

a.itemid, from_unixtime(a.clock) a_time, a.value

from

history_uint a

where

itemid=29176

and -- 時間段限制,一周或者任意時間段

-- date_sub(now(),interval 7 day) <= from_unixtime(a.clock)

a.clock between unix_timestamp('2019-03-24 09:00:00') and unix_timestamp('2019-03-26 15:00:00')

and -- 每天時間段限制,格式化日期到時分秒

( date_format(from_unixtime(a.clock), '%h:%i:%s') between '09:00:00' and '11:30:00'

or date_format(from_unixtime(a.clock), '%h:%i:%s') between '13:00:00' and '15:00:00'

)

實際上就是這個時間段格式不太會寫,導致這個where子句一直寫不出來。先將unix時間戳轉成日期格式,再將日期格式格式化成時分秒,忽略日期,這樣就可以進行時分秒上的時間判斷了,注意由於是兩個時間段,因此是或的關係,並且最後的時間段判斷要括號括起來。

主要涉及mysql時間轉換這幾個函式:

1.unix時間戳轉日期格式 from_unixtime(a.clock,"format")

例子1:select from_unixtime(1553070856)

預設不跟格式,如下結果:

例子2:select from_unixtime(1553070856, "%y-%m-%d %h:%i:%s")

2.日期格式轉unix時間戳 unix_timestamp('time')

例子:unix_timestamp('2019-03-24 09:00:00')

3.時間日期格式化 date_format(time,'format')

例子:select date_format(from_unixtime(1553070856), '%h:%i:%s')

4.日期格式化引數

"format"引數:

常用例子:"%y-%m-%d %h:%i:%s"   2019-03-20 16:34:16

%y年,四位格式:2019

%y年,兩位格式:19

%m月,英文格式:march

%m月,兩位格式:03

%d日,帶英文本尾:20th

%d日,兩位格式:20

%h時,24小時格式:16

%h時,12小時格式:04

%i分,兩位格式:34

%s秒,兩位格式:16,如果是8秒,則顯示08

%s秒,普通格式:如果是8秒,則顯示8

查詢指定時間段的資料

一 select from searchdetails where searchdatetime between 2014 10 06 01 40 50.123 and 2014 12 07 23 12 and datepart hour,searchdatetime between 1 and 1...

mysql查詢特定時間段內的資料

建表語句 set foreign key checks 0 table structure for t user drop table if exists t user create table t user userid bigint 20 not null,fullname varchar 64...

mysql 查詢某個時間段的資料

今天 select from 表名 where to days 時間欄位名 to days now 昨天 包括昨天和今天的資料 select from 表名 where to days now to days 時間欄位名 1 昨天 只包括昨天 select from 表名 where datedif...