mysql之DATETIME、DATE和TIMESTAMP簡單了解


MySQL5的日期類型有三種:DATETIME、DATE和TIMESTAMP,除了DATE用來表示一個不帶時分秒的是日期,另外兩個都帶時分秒。TIMESTAMP還可以精確到毫秒。

 

一、格式與區別

重點一:

1、DATE 是 年月日YYYY-MM-DD,

2、DATETIME 是 年月日時分秒YYYY-MM-DD HH:MM:SS,

3、TIMESTAMP是 年月日時分秒YYYY-MM-DD HH:MM:SS。

 

重點二:

然后就是區別,

DATETIME支持范圍:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'

TIMESTAMP支持范圍:格式一樣,但不能早於1970或晚於2037

 

DATETIME存儲8個字節,實際格式,與時區無關

TIMESTAMP存儲4個字節,UTC格式,時區轉化

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

  

二、定義

1、Timestamp

TIMESTAMP列類型的屬性不固定,取決於MySQL版本和服務器運行的SQL模式。

1.一個表可以存在多個TIMESTAMP列,但只有一個列會根據數據更新而改變為數據庫系統當前值。因此,一個表中有多個TIMESTAMP列是沒有意義,實際上一個表只設定一個TIMESTAMP列。

2.TIMESTAMP列的默認值是CURRENT_TIMESTAMP常量值。當紀錄數據發生變化的時候,TIMESTAMP列會自動將其值設定為CURRENT_TIMESTAMP。

 

 

2、datetime

當你需要同時包含日期和時間信息的值時則使用DATETIME類型。

支持的范圍為'1000-01-01 00:00:00''9999-12-31 23:59:59'

MySQL以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。

 

 

3、date

當你只需要日期值而不需要時間部分時應使用DATE類型

支持的范圍是'1000-01-01''9999-12-31'。

MySQL用'YYYY-MM-DD'格式檢索和顯示DATE值。

 

 

三、日期格式轉換

 

1、字符串轉日期

select STR_TO_DATE('2010-03-03 16:41:16', '%Y-%m-%d %H:%i:%s')

 
2、日期轉字符串

select DATE_FORMAT('2010-03-03 16:41:16', '%Y-%m-%d %H:%i:%s')

 

  

四、日期的中年月日時分秒星期月份等獲取方法

 

select TIMESTAMP('2010-03-03 16:41:16'); 

 

select DATE('2010-03-03 16:41:16'); 

 

select YEAR('2010-03-03 16:41:16'); 

 

select MONTH('2010-03-03 16:41:16'); 

 

select DAY('2010-03-03 16:41:16'); 

 

select TIME('2010-03-03 16:41:16'); 

 

select CURTIME(); 

 

select CURDATE(); 

 

select CURRENT_DATE; 

 

select CURRENT_TIME; 

 

select CURRENT_TIMESTAMP;

 

五、日期的算術運算

 

相關的函數很多很多,用法也很簡單,一看就會,建議查看MySQL參考手冊。

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' 

 

mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH); 

 

                -> '1998-02-28'

 

六、日期的大小比較(重點)

 

拿着日當數字,拿着字符串當日期,呵呵,很簡單的。

     and update_time > '2010-03-02 16:48:41' 

     and update_time <= '2010-03-03 16:51:58'

 

 

七、說明:

可以使用任何常見格式指定DATETIME、DATE和TIMESTAMP值:

 

'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的字符串。允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等價的。

 

'YYYY-MM-DD'或'YY-MM-DD'格式的字符串。這里也允許使用“不嚴格的”語法。例如,'98-12-31'、'98.12.31'、'98/12/31'和'98@12@31'是等價的。

 

'YYYYMMDDHHMMSS'或'YYMMDDHHMMSS'格式的沒有間割符的字符串,假定字符串對於日期類型是有意義的。例如,'19970523091528'和'970523091528'被解釋為'1997-05-23 09:15:28',但'971122129015'是不合法的(它有一個沒有意義的分鍾部分),將變為'0000-00-00 00:00:00'。

 

'YYYYMMDD'或'YYMMDD'格式的沒有間割符的字符串,假定字符串對於日期類型是有意義的。例如,'19970523'和'970523'被解釋為 '1997-05-23',但'971332'是不合法的(它有一個沒有意義的月和日部分),將變為'0000-00-00'。

 

YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的數字,假定數字對於日期類型是有意義的。例如,19830905132800和830905132800被解釋為 '1983-09-05 13:28:00'。

 

YYYYMMDD或YYMMDD格式的數字,假定數字對於日期類型是有意義的。例如,19830905和830905被解釋為'1983-09-05'。

 

無效DATETIME、DATE或者TIMESTAMP值被轉換為相應類型的“零”值('0000-00-00 00:00:00'、'0000-00-00'或者00000000000000)。

 

對於包括日期部分間割符的字符串值,如果日和月的值小於10,不需要指定兩位數。'1979-6-9'與'1979-06-09'是相同的。同樣,對於包括時間部分間割符的字符串值,如果時、分和秒的值小於10,不需要指定兩位數。'1979-10-30 1:2:3'與'1979-10-30 01:02:03'相同。

 

=========================================================================

當指定日期值時請注意某些缺陷:

 

指定為字符串的值允許的非嚴格格式可能會欺騙。例如,值'10:11:12'由於‘:’間割符看上去可能象時間值,但如果用於日期上下文值則被解釋為年'2010-11-12'。值'10:45:15'被轉換為'0000-00-00'因為'45'不是合法月。

 

在非嚴格模式,MySQL服務器只對日期的合法性進行基本檢查:年、月和日的范圍分別是1000到9999、00到12和00到31。任何包含超出這些范圍的部分的日期被轉換成'0000-00-00'。請注意仍然允許你保存非法日期,例如'2002-04-31'。要想確保不使用嚴格模式時日期有效,應檢查應用程序。

 

在嚴格模式,非法日期不被接受,並且不轉換。

 
 
 
 
     本文轉自韓立偉 51CTO博客,原文鏈接:http://blog.51cto.com/hanchaohan/1751447,如需轉載請自行聯系原作者


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM