1. 程式人生 > >MySQL查詢日期型數值常用SQL

MySQL查詢日期型數值常用SQL

  • MySQL 獲得當前日期/時間函式:

TO_DAYS()函式返回的一個天數,這個天數等於從epoch到給定日期的天數;


  • 查詢今天新增的記錄
# 欄位名不需要加引號;
SELECT * FROM test WHERE TO_DAYS(add_time) = TO_DAYS(NOW());

  • 查詢昨天新增的記錄
SELECT * FROM test WHERE TO_DAYS(NOW())-TO_DAYS(add_time) = 1;

  • 查詢近7天新增的記錄;
# 這裡的近七天包含今天
SELECT
* FROM test WHERE DATE_SUB(CURDATE(), INTERVAL 6 DAY) <=DATE(add_time)

DATE_SUB() 函式用來從給定日期減去給定的時間間隔。語法: DATE_SUB(date,INTERVAL expr type)
date 引數是合法的日期表示式;
expr 引數是您希望新增的時間間隔。
type可以取SECOND/MINUTE/HOUR/DAY/WEEK/MONTH/QUARTER/YEAR等等
與DATE_SUB()對應的函式是DATE_ADD()函式,用來從給定日期加上給定的時間間隔。

這裡的給定的時間間隔除了天,還可以是其他所有DATE_SUB()函式支援的型別。


  • 查詢本週(自然周)修改的記錄
SELECT * FROM test WHERE YEARWEEK(DATE_FORMAT(update_time,'%Y%m%d'),1) = YEARWEEK(now()); 

YEARWEEK() 是獲取年份和週數的一個函式,函式語法為YEARWEEK(date[,mode]) ;引數mode可選。
預設情況下,是把週日,作為一週的開始。而mode 則用來指定‘First day of week’ 以及用什麼樣的邏輯,來計算一年中的第一週。詳見此文


  • 查詢本月新增的記錄
SELECT
* FROM test WHERE DATE_FORMAT( add_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

DATE_FORMAT() 函式用於以不同的格式顯示日期/時間資料。
語法:DATE_FORMAT(date,format) ;date 引數是合法的日期。format 規定日期/時間的輸出格式。
這裡要注意的是。format中大小寫敏感,詳見w3cshcool


  • 查詢上個月新增的記錄;
SELECT * FROM test WHERE PERIOD_DIFF(date_format(NOW( ) , '%Y%m' ) , DATE_FORMAT(add_time, '%Y%m' ) ) =1

  • 查詢本季度新增的資料(第一季度為1-3月)
#如果是查詢本年,需要加上YEAR()條件;
SELECT * from test WHERE QUARTER(add_time)=QUARTER(now()) AND YEAR(add_time)=YEAR(NOW());

  • 查詢上一季度新增的資料
SELECT * FROM  test  WHERE QUARTER(add_time)=QUARTER(DATE_SUB(now(),INTERVAL 1 QUARTER)) AND YEAR(add_time)=YEAR(NOW());

持續完善中…..