1、MySQL查詢今天、昨天、上週、近30天、去年等的數據的方法:mysql
delete 訂單表 where datediff( dd, order_addtime, getdate() ) > 3 用函數datediff() datediff( dd, 時間1, 時間2 ),意思是:計算時間1到時間2之間的天數 因此,datediff( dd, order_addtime, getdate() ) > 3,就是超過3天的sql
今天 express
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 函數
2、相關函數簡介this
DATEDIFF 函數 [日期和時間]spa
功能
返回兩個日期之間的間隔。.net
語法
DATEDIFF ( date-part, date-expression-1, date-expression-2 )code
date-part :
year | quarter | month | week | day | hour | minute | second | millisecondorm
參數
date-part 指定要測量其間隔的日期部分。server
有關日期部分的詳細信息,請參見日期部分。
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' )
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, AS OrderPayDate FROM Orders DATE_SUB(OrderDate,INTERVAL 2 DAY)
結果:
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
--------------------------------------------------------------------------------------------------------------------------------
二、TO_DAYS(date)
給定一個日期date, 返回一個天數 (從年份0000-00-00開始的天數 )。
例:
select TO_DAYS(NOW()); select TO_DAYS(121018); |
給定一個日期date,返回一個天數(從年份0開始的天數)。
TO_DAYS() 不用於陽曆出現(1582)前的值,緣由是當日歷改變時,遺失的日期不會被考慮在內。
請記住, mysql「日期和時間類型」中的規則將日期中的二位數年份值轉化爲四位。例如, ‘1997-10-07′和 ‘97-10-07′ 被視爲一樣的日期:
對於1582 年以前的日期(或許在其它地區爲下一年 ), 該函數的結果實不可靠的。
實例
假設咱們有以下的表:
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
下面是 SELECT 語句:
SELECT NOW(),CURDATE(),CURTIME()
結果相似:
NOW() | CURDATE() | CURTIME() |
---|---|---|
2008-12-29 16:25:46 | 2008-12-29 | 16:25:46 |
下面的 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 |
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
QUARTER(d)函數返回日期d是一年中的第幾季度。值的範圍是1~4。
使用QUARTER()函數返回指定日期對應的季度。SQL語句以下:
mysql>SELECT QUARTER('14-09-29');
執行結果以下:
從上圖中代碼執行的結果能夠看出,14年9月29日是2014年的第3個季度。
「00~69」轉換爲「2000~2069」,「70~99」轉換爲「1970~1999」。
七、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 |