MySQL時間相關操作

2021-08-13 19:39:34 字數 4053 閱讀 7088

1、date_format引數格式

格式 描述 

%a 縮寫星期名

%b 縮寫月名

%c 月,數值

%d 帶有英文本首的月中的天

%d 月的天,數值(00-31)

%e 月的天,數值(0-31)

%f 微妙

%h 小時(00-23)

%h 小時(01-12)

%i 小時(01-12)

%i 分鐘,數值(00-59)

%j 年的天(001-366)

%k 小時(0-23)

%l 小時(1-12)

%m 月名

%m 月,數值(00-12)

%p am或pm

%r 時間,12-小時(hh:mm:ss am或pm)

%s 秒(00-59)

%s 秒(00-59)

%t 時間, 24-小時(hh:mm:ss)

%u 周(00-53)星期日是一周的第一天

%u 周(00-53)星期一是一周的第一天

%v 周(01-53)星期日是一周的第一天,與%x使用

%v 周(01-53)星期一是一周的第一天,與%x使用

%w 星期名

%w 周的天(0=星期日, 6=星期六)

%x 年,其中的星期日是周的第一天,4位,與%v使用

%x 年,其中的星期一是周的第一天,4位,與%v使用

%y 年,4位

%y 年,2位

2、時間相關查詢

select (datediff(date_add(curdate(), interval - day(curdate())+ 1

day), date_add(curdate()- day(curdate())+ 1, interval -1

month))) 上月總天數

, date_add(curdate(),interval -day(curdate())+1

day) 當月第一天

, date_add(curdate()-day(curdate())+1,interval -1

month ) 上月第一天

今天select * from 表名 where to_days(時間欄位名) = to_days(now());

昨天select * from 表名 where to_days( now( ) ) - to_days( 時間欄位名) <= 1

近7天select * from 表名 where date_sub(curdate(), interval

7day) <= date(時間欄位名)

近30天

select * from 表名 where date_sub(curdate(), interval

30day) <= date(時間欄位名)

本月select * from 表名 where date_format( 時間欄位名, '%y%m' ) = date_format( curdate( ) , '%y%m' )

上一月select * from 表名 where period_diff( date_format( now( ) , '%y%m' ) , date_format( 時間欄位名, '%y%m' ) ) =1

#查詢本季度資料

select * from

`ht_invoice_information`

where quarter(create_date)=quarter(now());

#查詢上季度資料

select * from

`ht_invoice_information`

where quarter(create_date)=quarter(date_sub(now(),interval

1 quarter));

#查詢本年資料

select * from

`ht_invoice_information`

where

year(create_date)=year(now());

#查詢上年資料

select * from

`ht_invoice_information`

where

year(create_date)=year(date_sub(now(),interval

1year));

查詢當前這週的資料(週日到周一)

select name,submittime from enterprise where yearweek(date_format(submittime,'%y-%m-%d')) = yearweek(now());

查詢當前這週的資料(周一到週日)

錯誤(會將去年的資料也統計進去):select name,submittime from enterprise where week(date_format(submittime,'%y-%m-%d'),1) = week(now(), 1);

正確:select name,submittime from enterprise where

yearweek(date_format(submittime,'%y-%m-%d'), 1) = yearweek(now(), 1)-1;

注:此方法無法解決跨年的問題

解決跨年問題的方法:

select * from table1 where

time between date_sub(curdate(),interval weekday(curdate()) + 7

day) and date_sub(curdate(),interval weekday(curdate()) + 0

day)

查詢上週的資料(週日到周一)

select name,submittime from enterprise where yearweek(date_format(submittime,'%y-%m-%d')) = yearweek(now())-1;

查詢當前月份的資料

select name,submittime from enterprise where date_format(submittime,'%y-%m')=date_format(now(),'%y-%m')

查詢距離當前現在6個月的資料

select name,submittime from enterprise where submittime between date_sub(now(),interval

6month) and now();

查詢上個月的資料

select name,submittime from enterprise where date_format(submittime,'%y-%m')=date_format(date_sub(curdate(), interval

1month),'%y-%m')

3、查詢時間段內資料

select * from test a where a.create_date between '2017-11-13'

and'2017-11-20'

order

by a.create_date;

--包括『2017-11-13』,不包括『2017-11-20』

4、計算兩個日期的時間差函式

第一種:timestampdiff函式,需要傳入三個引數,第乙個是比較的型別,可以比較frac_second、second、 minute、 hour、 day、 week、 month、 quarter或 year幾種型別,第二個和第三個引數是待比較的兩個時間,比較是後乙個時間減前乙個時間,具體用法如下:

select timestampdiff(day,'2012-10-01','2013-01-13');
第二種方法: datediff函式,就傳入兩個日期函式,比較的day天數,第乙個引數減去第二個引數的天數值:

select datediff('2013-01-13','2012-10-01');
mysql時間函式

mysql時間相關操作

mysql 昨天 一周前 一月前 一年前的資料 這裡主要用到了date sub,參考如下 複製 如下 select from yh content where inputtime date sub curdate interval 1 day where inputtime date sub cur...

mysql相關操作 mysql 相關操作

1 登入 mysql u root p 2 檢視當前有的資料庫 show databases 3 建立資料庫 create database 資料庫名 4 操作 使用 資料庫 use 資料庫名 5 檢視有哪些表 show tables 6 建立表 create table 表名 7 刪除表 drop...

mysql 時間操作 mysql操作時間

select curdate 獲取當前日期 select last day curdate 獲取當月最後一天。select date add curdate interval day curdate 1 day 獲取本月第一天 select date add curdate day curdate ...