MySQL查詢今天、昨天、上週、近30天、去年等的數據的方法

一、MySQL查詢今天、昨天、上週、近30天、去年等的數據的方法:

 


 

刪除建立時間超過3天的訂單記錄

 

delete 訂單表 where datediff( dd, order_addtime, getdate() ) > 3 用函數datediff() datediff( dd, 時間1, 時間2 ),意思是:計算時間1到時間2之間的天數 所以,datediff( dd, order_addtime, getdate() ) > 3,就是超過3天的

今天  

select * from 表名 where to_days(時間字段名) = to_days(now());  
昨天  
SELECT * FROM 表名 WHERETO_DAYS(NOW( ) ) - TO_DAYS( 時間字段名) <= 1  
7天  
SELECT * FROM 表名 whereDATE_SUB(CURDATE(), INTERVAL 7 DAY) <=date(時間字段名)  
近30天  
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <=date(時間字段名)  
本月  
SELECT * FROM 表名 WHEREDATE_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` whereQUARTER(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 1 year));  
查詢當前這周的數據   
SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());  
查詢上週的數據  
SELECT name,submittime FROM enterprise WHEREYEARWEEK(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 6 month) and now();  
查詢上個月的數據  
select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')  
select * from ` user ` where DATE_FORMAT(pudate, ' %Y%m ' ) = DATE_FORMAT(CURDATE(), ' %Y%m ' ) ;  
select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now())  
select *   
from user
where MONTH (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = MONTH (now())  
select *   
from [ user ]   
where YEAR (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = YEAR (now())  
and MONTH (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = MONTH (now())  
select *   
from [ user ]   
where pudate between 上月最後一天  
and 下月第一天  
where date(regdate)   =   curdate();  
select   *   from   test   where year(regdate)=year(now())   and month(regdate)=month(now())   and day(regdate)=day(now())  
SELECT date( c_instime ) ,curdate( )  
FROM `t_score`  
WHERE 1  
LIMIT 0 , 30 

二、相關函數簡介

 

0、Sql server中DateDiff()用法



 

DATEDIFF 函數 [日期和時間]

功能 
返回兩個日期之間的間隔。

語法 
DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part :
year | quarter | month | week | day | hour | minute | second | millisecond

參數 
date-part    指定要測量其間隔的日期部分。

有關日期部分的詳細信息,請參見日期部分。

date-expression-1    某一間隔的起始日期。從 date-expression-2 中減去該值,返回兩個參數之間 date-parts 的天數。

date-expression-2    某一間隔的結束日期。從該值中減去 Date-expression-1,返回兩個參數之間 date-parts 的天數。

用法 
此函數計算兩個指定日期之間日期部分的數目。結果爲日期部分中等於(date2 - date1)的有符號的整數值。

當結果不是日期部分的偶數倍時,DATEDIFF 將被截斷而不是被舍入。

當使用 day 作爲日期部分時,DATEDIFF 返回兩個指定的時間之間(包括第二個日期但不包括第一個日期)的午夜數。

當使用 month 作爲日期部分時,DATEDIFF 返回兩個日期之間(包括第二個日期但不包括第一個日期)出現的月的第一天的數目。

當使用 week 作爲日期部分時,DATEDIFF 返回兩個日期(包括第二個日期但不包括第一個日期)之間星期日的數目。

對於更小的時間單位存在溢出值:

milliseconds    24 天

seconds    68 年

minutes    4083 年

others    沒有溢出限制

如果超出這些限制,此函數將返回溢出錯誤。

標準和兼容性 
SQL/92    Transact-SQL 擴展。

SQL/99    Transact-SQL 擴展。

Sybase    與 Adaptive Server Enterprise 兼容。

下面示例的語句返回 1:

SELECT datediff( hour, '4:00AM', '5:50AM' )下面的語句返回 102:

SELECT datediff( month, '1987/05/02', '1995/11/15' )下面的語句返回 0:

SELECT datediff( day, '00:00', '23:59' )下面的語句返回 4:

SELECT datediff( day,
   '1999/07/19 00:00',
   '1999/07/23 23:59' )下面的語句返回 0:

SELECT datediff( month, '1999/07/19', '1999/07/23' )下面的語句返回 1:

SELECT datediff( month, '1999/07/19', '1999/08/23' )

 

 

1、MySQLDATE_SUB()函數

MySQL Date 函數

定義和用法

DATE_SUB() 函數從日期減去指定的時間間隔。

語法

DATE_SUB(date,INTERVAL expr type)

date 參數是合法的日期表達式。expr 參數是您希望添加的時間間隔。

type 參數可以是下列值:

Type 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

實例

假設我們有如下的表:

OrderId ProductName OrderDate
1 'Computer' 2008-12-29 16:25:46.635

現在,我們希望從 "OrderDate" 減去 2 天。

我們使用下面的 SELECT 語句:

SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders

結果:

OrderId OrderPayDate
1 2008-12-27 16:25:46.635

  例2.SELECT DATE_SUB('2010-08-12', INTERVAL '3-2' YEAR_MONTH) AS NewDate  
   結果:2007-06-12
  例3.SELECT DATE_SUB('2011-09-14 2:44:36', INTERVAL '2:26' HOUR_MINUTE) AS NewDate  

   結果: 2011-09-1400:18:36

--------------------------------------------------------------------------------------------------------------------------------

2、TO_DAYS(date)

給定一個日期date, 返回一個天數 (從年份0000-00-00開始的天數 )。
   例:

select TO_DAYS(NOW());
+----------------+
| TO_DAYS(NOW()) |
+----------------+
| 735159 |
+----------------+

select TO_DAYS(121018);
+-----------------+
| TO_DAYS(121018) |
+-----------------+
| 735159 |
+-----------------+

給定一個日期date,返回一個天數(從年份0開始的天數)。

TO_DAYS() 不用於陽曆出現(1582)前的值,原因是當日歷改變時,遺失的日期不會被考慮在內。

請記住, MySQL“日期和時間類型”中的規則將日期中的二位數年份值轉化爲四位。例如,  ‘1997-10-07′和 ‘97-10-07′ 被視爲同樣的日期:

對於1582 年之前的日期(或許在其它地區爲下一年 ), 該函數的結果實不可靠的。

 

3、MySQL DATE() 函數

MySQL Date 函數

定義和用法

DATE() 函數返回日期或日期/時間表達式的日期部分。

 

 

實例

 

 

假設我們有如下的表:

 

OrderId ProductName OrderDate
1 'Computer' 2008-12-29 16:25:46.635

 

我們使用下面的 SELECT 語句:

 

SELECT ProductName, DATE(OrderDate) AS OrderDate

 

 

FROM Orders

 

 

WHERE OrderId=1

 

 

結果:

 

ProductName OrderDate
'Computer' 2008-12-29

 

4、MySQL NOW() 函數

MySQL Date 函數

定義和用法

NOW() 函數返回當前的日期和時間。

語法

NOW()

實例

例子 1

下面是 SELECT 語句:

SELECT NOW(),CURDATE(),CURTIME()

結果類似:

NOW() CURDATE() CURTIME()
2008-12-29 16:25:46 2008-12-29 16:25:46

例子 2

下面的 SQL 創建帶有日期時間列 (OrderDate) 的 "Orders" 表:

CREATE TABLE Orders 
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (OrderId)
)

請注意,OrderDate 列規定 NOW() 作爲默認值。作爲結果,當您向表中插入行時,當前日期和時間自動插入列中。

現在,我們希望在 "Orders" 表中插入一條新記錄:

INSERT INTO Orders (ProductName) VALUES ('Computer')

"Orders" 表將類似這樣:

OrderId ProductName OrderDate
1 'Computer' 2008-12-29 16:25:46.635

5、MySQL DATE_FORMAT() 函數

MySQL Date 函數

定義和用法

DATE_FORMAT() 函數用於以不同的格式顯示日期/時間數據。

語法

DATE_FORMAT(date,format)

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 位

實例

下面的腳本使用 DATE_FORMAT() 函數來顯示不同的格式。我們使用 NOW() 來獲得當前的日期/時間:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

結果類似:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

6、MySQL獲取季度的函數QUARTER(d)

 

QUARTER(d)函數返回日期d是一年中的第幾季度。值的範圍是1~4。


實例

使用QUARTER()函數返回指定日期對應的季度。SQL語句如下:

mysql>SELECT QUARTER('14-09-29');

執行結果如下:

MySQL中使用QUARTER()函數返回指定日期對應的季度的操作效果

從上圖中代碼執行的結果可以看出,14年9月29日是2014年的第3個季度。


提示

“00~69”轉換爲“2000~2069”,“70~99”轉換爲“1970~1999”。

7、MySQL 的 YEARWEEK()函數

它是獲取年份和週數的一個函數,

函數形式爲 

YEARWEEK(date[,mode])

例如 2010-3-14 ,禮拜天

SELECT YEARWEEK('2010-3-14') 

返回

 11
SELECT YEARWEEK('2010-3-14',1) 

返回

 10

其中第二個參數是 mode ,具體指的意思如下:

Mode First day of week Range Week 1 is the first week …
0 Sunday 0-53 with a Sunday in this year
1 Monday 0-53 with more than 3 days this year
2 Sunday 1-53 with a Sunday in this year
3 Monday 1-53 with more than 3 days this year
4 Sunday 0-53 with more than 3 days this year
5 Monday 0-53 with a Monday in this year
6 Sunday 1-53 with more than 3 days this year
7 Monday 1-53 with a Monday in this year

 

轉載地址:https://blog.csdn.net/cangchen/article/details/44978531

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章