MySQL使用時間作為判斷條件

2021-10-10 13:45:03 字數 3011 閱讀 7973

背景:在開發過程中,我們經常需要根據時間作為判斷條件來查詢資料,例如:當月,當日,當前小時,幾天內…

我們只需要使用乙個mysql的month(date)函式即可實現。(注意判斷年份)

month(date);

-- 用法:month函式返回乙個整數,表示指定日期值的月份。

-- 舉例

select month('2020-11-11 00:00:00')

-- 返回值是11

之所以把「30天內」放在當月的後面,是因為我經常會遇到這兩個需求相互轉換的情況,「30天內」也可以稱作「乙個月內」。

這種情況我們需要使用datediff(expr1,expr2)函式。

datediff(expr1,expr2)

-- 用法:引數為兩個日期,返回的是expr1-expr2的天數差

-- 舉例

select datediff('2020-11-01 08:00:00','2020-11-11 00:00:00')

-- 返回值是-10

當日需要使用to_days(date)函式。

to_days(date)

-- 用法:返回從2023年(公元1年)至當前日期的總天數。

-- 舉例

select to_days('0000-01-01')

-- 返回值是1

select to_days('0001-01-01')

-- 返回值是366

這種情況需要hour(date)curdate()函式配合使用。

hour(date)

-- 用法:返回當前時間是今日的第幾個小時

-- 舉例

select hour('2020-11-11 11:11:11')

-- 返回值是11

curdate()

-- 用法:返回今日的日期,不包括時分秒, yyyy-mm-dd

-- 使用舉例

select * from table where created_at > curdate() and hour(created_at) = hour(now())

可以使用date_sub(date,interval expr unit)函式來實現。

date_sub(date,interval expr unit)

-- 用法:起始日期date 減去乙個時間段後的日期

後面的單位unit有很多值可以選擇,如下表:

型別(unit值)

含義expr表示式的形式

year年yy

month月mm

day日

ddhour時hh

minute分mm

second秒ss

year_month

年和月yy和mm之間用任意符號隔開

day_hour

日和小時

dd和hh之間用任意符號隔開

day_minute

日和分鐘

dd和mm之間用任意符號隔開

day_second

日和秒鐘

dd和ss之間用任意符號隔開

hour_minute

時和分hh和mm之間用任意符號隔開

hour_second

時和秒hh和ss之間用任意符號隔開

minute_second

分和秒mm和ss之間用任意符號隔開

-- 舉例

-- 七天內的資料查詢

select * from table where created_at > date_sub(curdate(),interval 7 day)

我們經常還會遇到這種需求,統計7天內每天資料的量。這種情況下,我們需要考慮沒有資料推送的情況,即為0也要得到。

我的思路如下:

select

date_sub( curdate(), interval m.s day ) as orderdate

from

( select 0 as s union all

select 1 union all

select 2 union all

select 3 union all

select 4 union all

select 5 union all

select 6

) m

以上面的sql查詢結果作為臨時表,匹配資料表統計多少天內的資料數量

-- 舉例:查詢12個月內每個月資料的數量

select count(t.created_at),res.date from

(select

date_format(date_sub( curdate(), interval m.s month ),'%y-%m') as date

from

( select 0 as s union all

select 1 union all

select 2 union all

select 3 union all

select 4 union all

select 5 union all

select 6 union all

select 7 union all

select 8 union all

select 9 union all

select 10 union all

select 11

) m)res

left join

table t on res.date = date_format(t.created_at,'%y-%m')

group by date

golang使用時間作為種子生成隨機數

如果你執行隨機數rand.intn n 這個函式,會發現每次生成的隨機數都是一樣的。比如 i 0 for i 10 這段 分別執行兩次,產生的序列是一樣的。為了產生 真正 的隨機數,可以用時間作為基數。用下面的方法。package main import fmt time math rand fun...

go使用時間作為種子生成隨機數

原文 設定時間種子使用time包 生成隨機數需要math rand包 列印輸出使用fmt包 不設定時間種子的話,每次生成的rand值相同 package main import fmt import math rand import time func generate randnum int fu...

使用時間服務

時間服務用於提供公信的時間資訊。一般的 時間服務無所謂,對於商務和軍事就很有用了。比如 商務 網際網路軟體許可過期,電子合同什麼時候算是違約,稅務部門什麼時候開始算你滯報金 軍事 記得以前電影總看見 3 00總攻開始,大家對時。不過現在都已經資訊化了,計算機不能掏出一塊omega,然後扭表針。方法 ...