1、to_days函數查詢今天的數據:select * from 表名 where to_days(時間字段名) = to_days(now()); to_days函數:返回從0000年(公元1年)至當前日期的總天數
2、DAYOFWEEK(date) ,返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標准。
3、WEEKDAY(date) ,返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
4、DAYOFMONTH(date) ,返回date的月份中日期,在1到31范圍內。
5、DAYOFYEAR(date) ,返回date在一年中的日數, 在1到366范圍內
6、MONTH(date) ,返回date的月份,范圍1到12。
7、DAYNAME(date) ,返回date的星期名字。
8、MONTHNAME(date) ,返回date的月份名字。
9、QUARTER(date) ,返回date一年中的季度,范圍1到4。
select TO_DAYS(NOW()) - TO_DAYS('2017-11-02');//1
select DAYOFWEEK('2017-11-05'); //1(注意周日是1)
select WEEKDAY('2017-11-03');//4(0開始)
select DAYOFMONTH('2017-11-03');//3
select dayofyear('2017-11-03')//307
select month('2017-11-03')//11
select dayname('2017-11-03')//Friday
select MONTHNAME('2017-11-03')//November
select QUARTER('2017-11-03')//4
10、WEEK(date):對於星期天是一周的第一天的地方,有一個單個參數,返回date的周數,范圍在0到52。
WEEK(date,first) :2個參數形式WEEK()允許你指定星期是否開始於星期天或星期一。如果第二個參數是0,星期從星期天開始,如果第二個參數是1, 從星期一開始。
11、YEAR(date) ,返回date的年份,范圍在1000到9999。
12、HOUR(time) ,返回time的小時,范圍是0到23。
13、MINUTE(time) ,返回time的分鍾,范圍是0到59。
14、SECOND(time) ,回來time的秒數,范圍是0到59。
select WEEK('2017-11-05'); //45(周日開始算一周,11.05是周日,算新的一周)
select WEEK('2017-11-05',1);//44(周一開始算一周,11.05是周日,還不算新的一周)
select YEAR('2017-11-03');//2017
select HOUR('2017-11-03 11:05:36')//11
select MINUTE('2017-11-03 11:05:36')//5
select SECOND('2017-11-03 11:05:36')//36
15、PERIOD_ADD(P,N) ,增加N個月到階段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意階段參數P不是日期值。
16、PERIOD_DIFF(P1,P2) ,返回在時期P1和P2之間月數,P1和P2應該以格式YYMM或YYYYMM。注意,時期參數P1和P2不是日期值。
select PERIOD_ADD('201711',2); //201801
select PERIOD_DIFF('201711','201702');//9
17、計算:
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
這些功能執行日期運算。對於MySQL 3.22,他們是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同義詞。在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(見例子)
date:是一個指定開始日期的DATETIME或DATE值;
expr:是指定加到開始日期或從開始日期減去的間隔值一個表達式。expr是一個字符串,它可以以一個“-”開始表示負間隔。
type:是一個關鍵詞,指明表達式應該如何被解釋。
下表顯示了type和expr參數怎樣被關聯: type值 含義 期望的expr格式 SECOND 秒 SECONDS MINUTE 分鍾 MINUTES HOUR 時間 HOURS DAY 天 DAYS MONTH 月 MONTHS YEAR 年 YEARS MINUTE_SECOND 分鍾和秒 "MINUTES:SECONDS" HOUR_MINUTE 小時和分鍾 "HOURS:MINUTES" DAY_HOUR 天和小時 "DAYS HOURS" YEAR_MONTH 年和月 "YEARS-MONTHS" HOUR_SECOND 小時, 分鍾, "HOURS:MINUTES:SECONDS" DAY_MINUTE 天, 小時, 分鍾 "DAYS HOURS:MINUTES" DAY_SECOND 天, 小時, 分鍾, 秒 "DAYS HOURS:MINUTES:SECONDS"
MySQL在expr格式中允許任何標點分隔符,表示顯示的是建議的分隔符。如果date參數是一個DATE值並且你的計算僅僅包含YEAR、MONTH和DAY部分(即,沒有時間部分),結果是一個DATE值。否則結果是一個DATETIME值。
SELECT "2017-11-05 23:59:59" + INTERVAL 1 SECOND; //2017-11-06 00:00:00
select INTERVAL 2 day + "2017-11-05" //2017-11-07
select "2017-11-05" - INTERVAL 2 SECOND //2017-11-04 23:59:58
SELECT DATE_ADD("2017-11-05 23:59:59",INTERVAL 1 SECOND); //2017-11-06 00:00:00
SELECT DATE_ADD("2017-11-05 23:59:59",INTERVAL 1 DAY); //2017-11-06 23:59:59
SELECT DATE_ADD("2017-11-05 23:59:59",INTERVAL "1:1" MINUTE_SECOND);//2017-11-06 00:01:00
SELECT DATE_SUB("2017-11-05 23:59:59",INTERVAL "1:1" MINUTE_SECOND);//2017-11-05 23:58:58
SELECT DATE_ADD("2017-11-05 23:59:59",INTERVAL "-1 10" DAY_HOUR);//2017-11-04 13:59:59
SELECT DATE_SUB("2017-11-05 23:59:59",INTERVAL 31 DAY);//2017-10-05 23:59:59
SELECT DATE_SUB("2017-11-05 23:59:59",INTERVAL -31 DAY);//2017-12-06 23:59:59
注意:如果你增加MONTH、YEAR_MONTH或YEAR並且結果日期大於新月份的最大值天數,日子在新月用最大的天調整。
select DATE_ADD('2017-01-30', Interval 1 month); //2017-02-28
18、EXTRACT(type FROM date),函數從日期中返回“type”間隔。
SELECT EXTRACT(YEAR FROM "2017-11-05");//2017
SELECT EXTRACT(YEAR_MONTH FROM "2017-11-05");//201711
SELECT EXTRACT(DAY_MINUTE FROM "2017-11-05 01:02:03");//50102
SELECT EXTRACT(DAY_MINUTE FROM "2017-11-15 01:02:03");//15102
19、FROM_DAYS(N) ,給出一個天數N,返回一個DATE值。
select FROM_DAYS(729669);//1997-10-07
20、DATE_FORMAT(date,format) ,根據format字符串格式化date值。
//下列修飾符可以被用在format字符串中:
%M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat) %d 月份中的天數, 數字(00……31) %e 月份中的天數, 數字(0……31) %m 月, 數字(01……12) %c 月, 數字(1……12) %b 縮寫的月份名字(Jan……Dec) %j 一年中的天數(001……366) %H 小時(00……23) %k 小時(0……23) %h 小時(01……12) %I 小時(01……12) %l 小時(1……12) %i 分鍾, 數字(00……59) %r 時間,12 小時(hh:mm:ss [AP]M) %T 時間,24 小時(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM %w 一個星期中的天數(0=Sunday ……6=Saturday ) %U 星期(0……52), 這里星期天是星期的第一天 %u 星期(0……52), 這里星期一是星期的第一天 %% 一個文字“%”。 //所有的其他字符不做解釋被復制到結果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> 'Saturday October 1997' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6'
//MySQL3.23中,在格式修飾符字符前需要%。在MySQL更早的版本中,%是可選的。
21、TIME_FORMAT(time,format) ,這象上面的DATE_FORMAT()函數一樣使用,但是format字符串只能包含處理小時、分鍾和秒的那些格式修飾符。 其他修飾符產生一個NULL值或0。
22、CURDATE()或CURRENT_DATE,以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取決於函數是在一個字符串還是數字上下文被使用。
23、CURTIME()或CURRENT_TIME,以'HH:MM:SS'或HHMMSS格式返回當前時間值,取決於函數是在一個字符串還是在數字的上下文被使用。
24、NOW()、SYSDATE()、CURRENT_TIMESTAMP,以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回當前的日期和時間,取決於函數是在一個字符串還是在數字的上下文被使用。
25、SEC_TO_TIME(seconds),返回seconds參數,變換成小時、分鍾和秒,值以'HH:MM:SS'或HHMMSS格式化,取決於函數是在一個字符串還是在數字上下文中被使用。
26、TIME_TO_SEC(time),返回time參數,轉換成秒。
select CURDATE(); //2017-11-03
select CURDATE() + 0; //20171103
select curtime(); //17:36:12
select curtime() + 0; //173612
select NOW();//2017-11-03 17:38:07
select NOW() + 0;//20171103173825
select SEC_TO_TIME(2378);//00:39:38
select TIME_TO_SEC("22:23:00");//80580