《MYSQL教程mysql的日期和時間函數大全第1/2頁》要點:
本文介紹了MYSQL教程mysql的日期和時間函數大全第1/2頁,希望對您有用。如果有疑問,可以聯系我們。
mysql>?SELECT?something?FROM?tbl_name
???????????WHERE?TO_DAYS(NOW())?-?TO_DAYS(date_col)?<=?30;
DAYOFWEEK(date)?
返回?date?的星期索引(1?=?Sunday,?2?=?Monday,?...?7?=?Saturday).索引值符合?ODBC?的標準.?
mysql>?SELECT?DAYOFWEEK('1998-02-03');
????????->?3
WEEKDAY(date)?
返回?date?的星期索引(0?=?Monday,?1?=?Tuesday,?...?6?=?Sunday):?
mysql>?SELECT?WEEKDAY('1998-02-03?22:23:00');
????????->?1
mysql>?SELECT?WEEKDAY('1997-11-05');
????????->?2
DAYOFMONTH(date)?
返回?date?是一月中的第幾天,范圍為?1?到?31:?
mysql>?SELECT?DAYOFMONTH('1998-02-03');
????????->?3
DAYOFYEAR(date)?
返回?date?是一年中的第幾天,范圍為?1?到?366:?
mysql>?SELECT?DAYOFYEAR('1998-02-03');
????????->?34
MONTH(date)?
返回?date?中的月份,范圍為?1?到?12:?
mysql>?SELECT?MONTH('1998-02-03');
????????->?2
DAYNAME(date)?
返回?date?的星期名:?
mysql>?SELECT?DAYNAME("1998-02-05");
????????->?'Thursday'
MONTHNAME(date)?
返回?date?的月份名:?
mysql>?SELECT?MONTHNAME("1998-02-05");
????????->?'February'
QUARTER(date)?
返回?date?在一年中的季度,范圍為?1?到?4:?
mysql>?SELECT?QUARTER('98-04-01');
????????->?2
WEEK(date)?
WEEK(date,first)?
對于星期日是一周中的第一天的場合,如果函數只有一個參數調用,返回?date?為一年的第幾周,返回值范圍為?0?到?53?(是的,可能有第?53?周的開始).兩個參數形式的?WEEK()?允許你指定一周是否以星期日或星期一開始,以及返回值為?0-53?還是?1-52.?這里的一個表顯示第二個參數是如何工作的:?值??含義??
0??一周以星期日開始,返回值范圍為?0-53??
1??一周以星期一開始,返回值范圍為?0-53??
2??一周以星期日開始,返回值范圍為?1-53??
3??一周以星期一開始,返回值范圍為?1-53?(ISO?8601)??
mysql>?SELECT?WEEK('1998-02-20');
????????->?7
mysql>?SELECT?WEEK('1998-02-20',0);
????????->?7
mysql>?SELECT?WEEK('1998-02-20',1);
????????->?8
mysql>?SELECT?WEEK('1998-12-31',1);
????????->?53
注意,在版本?4.0?中,WEEK(#,0)?被更改為匹配?USA?歷法.?注意,如果一周是上一年的最后一周,當你沒有使用?2?或?3?做為可選參數時,MySQL?將返回?0:?
mysql>?SELECT?YEAR('2000-01-01'),?WEEK('2000-01-01',0);
????????->?2000,?0
mysql>?SELECT?WEEK('2000-01-01',2);
????????->?52
你可能會爭辯說,當給定的日期值實際上是?1999?年的第?52?周的一部分時,MySQL?對?WEEK()?函數應該返回?52.我們決定返回?0?,是因為我們希望該函數返回“在指定年份中是第幾周”.當與其它的提取日期值中的月日值的函數結合使用時,這使得?WEEK()?函數的用法可靠.?如果你更希望能得到恰當的年-周值,那么你應該使用參數?2?或?3?做為可選參數,或者使用函數?YEARWEEK()?:?
mysql>?SELECT?YEARWEEK('2000-01-01');
????????->?199952
mysql>?SELECT?MID(YEARWEEK('2000-01-01'),5,2);
????????->?52
YEAR(date)?
返回?date?的年份,范圍為?1000?到?9999:?
mysql>?SELECT?YEAR('98-02-03');
????????->?1998
YEARWEEK(date)?
YEARWEEK(date,first)?
返回一個日期值是的哪一年的哪一周.第二個參數的形式與作用完全與?WEEK()?的第二個參數一致.注意,對于給定的日期參數是一年的第一周或最后一周的,返回的年份值可能與日期參數給出的年份不一致:?
mysql>?SELECT?YEARWEEK('1987-01-01');
????????->?198653
注意,對于可選參數?0?或?1,周值的返回值不同于?WEEK()?函數所返回值(0),?WEEK()?根據給定的年語境返回周值.?
HOUR(time)?
返回?time?的小時值,范圍為?0?到?23:?
mysql>?SELECT?HOUR('10:05:03');
????????->?10
MINUTE(time)?
返回?time?的分鐘值,范圍為?0?到?59:?
mysql>?SELECT?MINUTE('98-02-03?10:05:03');
????????->?5
SECOND(time)?
返回?time?的秒值,范圍為?0?到?59:?
mysql>?SELECT?SECOND('10:05:03');
????????->?3
PERIOD_ADD(P,N)?
增加?N?個月到時期?P(格式為?YYMM?或?YYYYMM)中.以?YYYYMM?格式返回值.?注意,期間參數?P?不是?一個日期值:?
mysql>?SELECT?PERIOD_ADD(9801,2);
????????->?199803
PERIOD_DIFF(P1,P2)?
返回時期?P1?和?P2?之間的月數.P1?和?P2?應該以?YYMM?或?YYYYMM?指定.?注意,時期參數?P1?和?P2?不是?日期值:?
mysql>?SELECT?PERIOD_DIFF(9802,199703);
????????->?11
DATE_ADD(date,INTERVAL?expr?type)?
DATE_SUB(date,INTERVAL?expr?type)?
ADDDATE(date,INTERVAL?expr?type)?
SUBDATE(date,INTERVAL?expr?type)?
這些函數執行日期的算術運算.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"??
在?expr?的格式中,MySQL?允許任何字符作為定界符.表中所顯示的是建議的定界字符.如果?date?參數是一個?DATE?值,并且計算的間隔僅僅有?YEAR、MONTH?和?DAY?部分(沒有時間部分),那么返回值也是一個?DATE?值.否則返回值是一個?DATETIME?值:?
mysql>?SELECT?"1997-12-31?23:59:59"?+?INTERVAL?1?SECOND;
????????->?1998-01-01?00:00:00
mysql>?SELECT?INTERVAL?1?DAY?+?"1997-12-31";
????????->?1998-01-01
mysql>?SELECT?"1998-01-01"?-?INTERVAL?1?SECOND;
???????->?1997-12-31?23:59:59
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",
????->?????????????????INTERVAL?1?SECOND);
????????->?1998-01-01?00:00:00
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",
????->?????????????????INTERVAL?1?DAY);
????????->?1998-01-01?23:59:59
mysql>?SELECT?DATE_ADD("1997-12-31?23:59:59",
????->?????????????????INTERVAL?"1:1"?MINUTE_SECOND);
????????->?1998-01-01?00:01:00
mysql>?SELECT?DATE_SUB("1998-01-01?00:00:00",
????->?????????????????INTERVAL?"1?1:1:1"?DAY_SECOND);
????????->?1997-12-30?22:58:59
mysql>?SELECT?DATE_ADD("1998-01-01?00:00:00",
????->?????????????????INTERVAL?"-1?10"?DAY_HOUR);
????????->?1997-12-30?14:00:00
mysql>?SELECT?DATE_SUB("1998-01-02",?INTERVAL?31?DAY);
????????->?1997-12-02
_baidu_page_break_tag_
如果你指定了一個太短的間隔值(沒有包括?type?關鍵詞所期望的所有間隔部分),MySQL?假設你遺漏了間隔值的最左邊部分.例如,如果指定一個?type?為?DAY_SECOND,那么?expr?值被期望包含天、小時、分鐘和秒部分.如果你象?"1:10"?樣指定一個值,MySQL?假設天和小時部分被遺漏了,指定的值代表分鐘和秒.換句話說,"1:10"?DAY_SECOND?被解釋為等價于?"1:10"?MINUTE_SECOND.這類似于?MySQL?解釋?TIME?值為經過的時間而不是一天的時刻.?注意,如果依著包含一個時間部分的間隔增加或減少一個日期值,該日期值將被自動地轉換到一個日期時間值:?
mysql>?SELECT?DATE_ADD("1999-01-01",?INTERVAL?1?DAY);
???????->?1999-01-02
mysql>?SELECT?DATE_ADD("1999-01-01",?INTERVAL?1?HOUR);
???????->?1999-01-01?01:00:00
如果你使用了確定不正確的日期,返回結果將是?NULL.如果你增加?MONTH、YEAR_MONTH?或?YEAR,并且結果日期的天比新月份的最大天數還大,那么它將被調整到新月份的最大天數:?
mysql>?SELECT?DATE_ADD('1998-01-30',?INTERVAL?1?MONTH);
????????->?1998-02-28
注意,上面的例子中,單詞?INTERVAL?和關鍵詞?type?是不區分字母大小寫的.?
EXTRACT(type?FROM?date)?
EXTRACT()?函數使用與?DATE_ADD()?或?DATE_SUB()?一致的間隔類型,但是它用于指定從日期中提取的部分,而不是進行日期算術運算.?
mysql>?SELECT?EXTRACT(YEAR?FROM?"1999-07-02");
???????->?1999
mysql>?SELECT?EXTRACT(YEAR_MONTH?FROM?"1999-07-02?01:02:03");
???????->?199907
mysql>?SELECT?EXTRACT(DAY_MINUTE?FROM?"1999-07-02?01:02:03");
???????->?20102
TO_DAYS(date)?
給出一個日期?date,返回一個天數(從?0?年開始的天數):?
mysql>?SELECT?TO_DAYS(950501);
????????->?728779
mysql>?SELECT?TO_DAYS('1997-10-07');
????????->?729669
TO_DAYS()?無意于使用先于格里高里歷法(即現行的陽歷)(1582)出現的值,因為它不考慮當歷法改變時所遺失的天數.?
FROM_DAYS(N)?
給出一個天數?N,返回一個?DATE?值:?
mysql>?SELECT?FROM_DAYS(729669);
????????->?'1997-10-07'
FROM_DAYS()?無意于使用先于格里高里歷法(1582)出現的值,因為它不考慮當歷法改變時所遺失的天數.?
DATE_FORMAT(date,format)?
按照?format?字符串格式化?date?值.下面的修飾符可被用于?format?字符串中:?修飾符??含義??
%M??月的名字?(January..December)??
%W??星期的名字?(Sunday..Saturday)??
%D??有英文后綴的某月的第幾天?(0th,?1st,?2nd,?3rd,?etc.)??
%Y??年份,數字的,4?位??
%y??年份,數字的,2?位??
%X??周值的年份,星期日是一個星期的第一天,數字的,4?位,與?'%V'?一同使用??
%x??周值的年份,星期一是一個星期的第一天,數字的,4?位,與?'%v'?一同使用??
%a??縮寫的星期名?(Sun..Sat)??
%d??月份中的天數,數字的?(00..31)??
%e??月份中的天數,數字的?(0..31)??
%m??月,數字的?(00..12)??
%c??月,數字的?(0..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??星期?(00..53),星期日是一個星期的第一天??
%u??星期?(00..53),星期一是一個星期的第一天??
%V??星期?(01..53),星期日是一個星期的第一天.與?'%X'?一起使用??
%v??星期?(01..53),星期一是一個星期的第一天.與?'%x'?一起使用??
%%??一個字母?“%”??
所有其它的字符不經過解釋,直接復制到結果中:?
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'
mysql>?SELECT?DATE_FORMAT('1999-01-01',?'%X?%V');
????????->?'1998?52'
在?MySQL?3.23?中,在格式修飾符前需要字符?`%'.在更早的?MySQL?版本中,`%'?是可選的.?月份與天修飾符的范圍從零開始的原因是,在?MySQL?3.23?中,它允許存儲不完善的日期值(例如?'2004-00-00').?
TIME_FORMAT(time,format)?
它的使用方法與上面的?DATE_FORMAT()?函數相似,但是?format?字符串只包含處理小時、分和秒的那些格式修飾符.使用其它的修飾符會產生一個?NULL?值或?0.?
CURDATE()?
CURRENT_DATE?
以?'YYYY-MM-DD'?或?YYYYMMDD?格式返回當前的日期值,返回的格式取決于該函數是用于字符串還是數字語境中:?
mysql>?SELECT?CURDATE();
????????->?'1997-12-15'
mysql>?SELECT?CURDATE()?+?0;
????????->?19971215
CURTIME()?
CURRENT_TIME?
以?'HH:MM:SS'?或?HHMMSS?格式返回當前的時間值,返回的格式取決于該函數是用于字符串還是數字語境中:?
mysql>?SELECT?CURTIME();
????????->?'23:50:26'
mysql>?SELECT?CURTIME()?+?0;
????????->?235026
NOW()?
SYSDATE()?
CURRENT_TIMESTAMP?
以?'YYYY-MM-DD?HH:MM:SS'?或?YYYYMMDDHHMMSS?格式返回當前的日期時間值,返回的格式取決于該函數是用于字符串還是數字語境中:?
mysql>?SELECT?NOW();
????????->?'1997-12-15?23:50:26'
mysql>?SELECT?NOW()?+?0;
????????->?19971215235026
注意,函數?NOW()?在每個查詢中只計算一次,也就是在查詢開始執行時.這就是說,如果在一個單獨的查詢中多次引用了?NOW(),它只會給出值都是一個相同的時間.?
UNIX_TIMESTAMP()?
UNIX_TIMESTAMP(date)?
如果調用時沒有參數,以無符號的整數形式返回一個?Unix?時間戳(從?'1970-01-01?00:00:00'?GMT?開始的秒數).如果以一個參數?date?調用?UNIX_TIMESTAMP(),它將返回該參數值從?'1970-01-01?00:00:00'?GMT?開始經過的秒數值.date?可以是一個?DATE?字符串,一個?DATETIME?字符串,一個?TIMESTAMP,或者以一個?YYMMDD?或?YYYYMMDD?顯示的本地時間:?
mysql>?SELECT?UNIX_TIMESTAMP();
????????->?882226357
mysql>?SELECT?UNIX_TIMESTAMP('1997-10-04?22:23:00');
????????->?875996580
當?UNIX_TIMESTAMP?被用于一個?TIMESTAMP?列時,函數直接返回一個內部的時間戳值,而不進行一個隱含地?“string-to-unix-timestamp”?轉換.如果你傳遞一個超出范圍的日期參數給?UNIX_TIMESTAMP()?,它將返回?0,但是請注意,MySQL?對其僅僅進行基本的檢驗(年范圍?1970-2037,月份?01-12,日期?01-31).?如果你希望減去?UNIX_TIMESTAMP()?列,你應該需要將結果強制轉換為一有符號整數.查看章節?6.3.5?Cast?函數.?
FROM_UNIXTIME(unix_timestamp?[,format])?
以?'YYYY-MM-DD?HH:MM:SS'?或?YYYYMMDDHHMMSS?格式返回一個?unix_timestamp?參數值,返回值的形式取決于該函數使用于字符串還是數字語境.?如果?format?給出,返回值依?format?字符串被格式.format?可以包含與?DATE_FORMAT()?函數同樣的修飾符.?
mysql>?SELECT?FROM_UNIXTIME(875996580);
????????->?'1997-10-04?22:23:00'
mysql>?SELECT?FROM_UNIXTIME(875996580)?+?0;
????????->?19971004222300
mysql>?SELECT?FROM_UNIXTIME(UNIX_TIMESTAMP(),
????????????????????????????'%Y?%D?%M?%h:%i:%s?%x');
????????->?'1997?23rd?December?03:43:30?1997'
SEC_TO_TIME(seconds)?
以?'HH:MM:SS'?或?HHMMSS?格式返回參數?seconds?被轉換到時分秒后的值,返回值的形式取決于該函數使用于字符串還是數字語境:?
mysql>?SELECT?SEC_TO_TIME(2378);
????????->?'00:39:38'
mysql>?SELECT?SEC_TO_TIME(2378)?+?0;
????????->?3938
TIME_TO_SEC(time)?
將參數?time?轉換為秒數后返回:?
mysql>?SELECT?TIME_TO_SEC('22:23:00');
????????->?80580
mysql>?SELECT?TIME_TO_SEC('00:39:38');
????????->?2378
維易PHP培訓學院每天發布《MYSQL教程mysql的日期和時間函數大全第1/2頁》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9563.html