程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 解讀mysql時間函數sysdate()和now()

解讀mysql時間函數sysdate()和now()

編輯:MySQL綜合教程

解讀mysql時間函數sysdate()和now()   NOW()    www.2cto.com   返回當前日期和時間值,其格式為 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS , 具體格式取決於該函數是否用在字符串中或數字語境中。  mysql> SELECT NOW();          -> '1997-12-15 23:50:26'  mysql> SELECT NOW() + 0;          -> 19971215235026  在一個存儲程序或觸發器內, NOW() 返回一個常數時間,該常數指示了該程序或觸發語句開始執行的時間。這同SYSDATE()的運行有所不同。    SYSDATE()    返回當前日期和時間值,格式為'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS, 具體格式根據函數是否用在字符串或數字語境而定。  在一個存儲程序或觸發器中, SYSDATE()返回其執行的時間, 而非存儲成都或觸發語句開始執行的時間。這個NOW()的運作有所不同。    我的理解:  now()是應用向mysql服務器發起執行語句時(無論是發送的sql還是存儲過程的名字),now()時間已經產生。  調用在該存儲過程中或者sql中調用now(),即為調用該變量。  而sysdate()函數是每次實時去取的    在我們公司的業務中,由於禁止使用存儲過程,顯然無論使用sysdate()還是now()都能夠滿足業務需求。當然,考慮到sysdate要實時取時間,我認為now()是比較推薦的.    實踐是檢驗真理的唯一標准:  1.存儲過程:  BEGIN    select now(),sysdate();    select sleep(3) ;    select now(),sysdate();  END  執行結果:    mysql> call test;  +---------------------+---------------------+  | now()               | sysdate()           |  +---------------------+---------------------+  | 2011-01-21 11:22:58 | 2011-01-21 11:22:58 |  +---------------------+---------------------+  1 row in set (0.00 sec)  +----------+  | sleep(3) |  +----------+  |        0 |  +----------+  1 row in set (3.00 sec)  +---------------------+---------------------+  | now()               | sysdate()           |  +---------------------+---------------------+  | 2011-01-21 11:23:01 | 2011-01-21 11:23:01 |  +---------------------+---------------------+  1 row in set (3.01 sec)  Query OK, 0 rows affected (3.01 sec)  通過如上結果來看,第一個now()跟第二個now()執行結果不一致;對存儲過程之內的now()函數,並非取自存儲過程執行的開始時間。    2.sql語句測試:  mysql> select now(),sleep(3),now();  +---------------------+----------+---------------------+  | now()               | sleep(3) | now()               |  +---------------------+----------+---------------------+  | 2011-01-21 11:25:45 |        0 | 2011-01-21 11:25:45 |  +---------------------+----------+---------------------+  1 row in set (3.00 sec)  評:now()函數,每次取語句開始的執行時間.  mysql> select sysdate(),sleep(3),sysdate();  +---------------------+----------+---------------------+  | sysdate()           | sleep(3) | sysdate()           |  +---------------------+----------+---------------------+  | 2011-01-21 11:26:44 |        0 | 2011-01-21 11:26:47 |  +---------------------+----------+---------------------+  1 row in set (3.02 sec)  評:sysdate() 每次會取實際的時間。    綜合上面的結果:  1.在公司絕大部分業務中now()函數已經夠用,特別是gmt_create,gmt_modified字段的時間,無疑要用now()  2.sysdate()用在需要每個字段執行的時候實時取時間的。  3.mysql的字段是從左到右依次執行。  

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