程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL日期類型DATETIME和TIMESTAMP

MySQL日期類型DATETIME和TIMESTAMP

編輯:MySQL綜合教程

MySQL日期類型DATETIME和TIMESTAMP


MySQL5的日期類型有三種:DATETIME、DATE和TIMESTAMP,除了DATE用來表示一個不帶時分秒的是日期,另外兩個都帶時分秒。TIMESTAMP還可以精確到毫秒。   其次還有個共性,就是他們的格式“不嚴格”,很自由,一般你認為對的格式都可以正確插入到數據庫中。   這裡主要解決帶時分秒日期的一些常見問題。   一、IMESTAMP   1、TIMESTAMP列必須有默認值,默認值可以為“0000-00-00 00:00:00”,但不能為null。 2、TIMESTAMP列不可以設置值,只能由數據庫自動去修改。 3、一個表可以存在多個TIMESTAMP列,但只有一個列會根據數據更新而改變為數據庫系統當前值。因此,一個表中有多個TIMESTAMP列是沒有意義,實際上一個表只設定一個TIMESTAMP列。 4、TIMESTAMP列的默認值是CURRENT_TIMESTAMP常量值。當紀錄數據發生變化的時候,TIMESTAMP列會自動將其值設定為CURRENT_TIMESTAMP。 5、TIMESTAMP列創建後的格式是: `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 這個語句含義,a字段的默認值是CURRENT_TIMESTAMP,當紀錄更新時候,自動將a字段的值設置為CURRENT_TIMESTAMP。 6、另外,下面的定義從語法角度是對的,但是沒有意義,因為該字段的值不可更改,永遠只能為默認值。 `b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',     二、DATETIME   1、DATETIME列可以設置為多個,默認可為null,可以手動設置其值。 2、DATETIME列不可設定默認值,這是很多人煞費苦心研究的成果,呵呵! 3、DATETIME列可以變相的設定默認值,比如通過觸發器、或者在插入數據時候,將DATETIME字段值設置為now(),這樣可以做到了,尤其是後者,在程序開發中常常用到。   一般建表時候,創建時間用datetime,更新時間用timestamp。
CREATE TABLE user ( 
    id bigint(20) NOT NULL AUTO_INCREMENT, 
    name varchar(20) CHARACTER SET gbk NOT NULL, 
    sex tinyint(1) DEFAULT '1', 
    state smallint(2) DEFAULT '1', 
    createtime datetime NOT NULL, 
    updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (id) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

 

三、日期最大值范圍的問題   日期最大范圍的問題不是絕對的,很多人制定一個說不能查過20XX年,這是扯蛋,根本沒這回事。日期的范圍等問題與MySQL的運行模式有關。當然這個范圍很寬廣,足夠祖宗十八代用了,不用擔心這問題了。   相反,要注意的問題是,編程語言對日期范圍的限制,不同的語言,有不同的限制,這裡不做討論了。   四、日期格式轉換   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'

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved