共計 3995 個字符,預計需要花費 10 分鐘才能閱讀完成。
今天就跟大家聊聊有關 MySQL 中怎么操作日期和時間,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
日期和時間函數(shù)對建立一個站點是非常有用的。站點的主人往往對一個表中的數(shù)據(jù)何時被更新感興趣。通過日期和時間函數(shù),你可以在秒級跟蹤一個表的改變。
日期和時間類型是 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。這些的每一個都有合法值的一個范圍,而“零”當你指定確實不合法的值時被使用。注意,MySQL 允許你存儲某個“不嚴格地”合法的日期值,例如 1999-11-31,原因我們認為它是應用程序的責任來處理日期檢查,而不是 SQL 服務器。為了使日期檢查更“快”,MySQL 僅檢查月份在 0 -12 的范圍,天在 0 -31 的范圍。上述范圍這樣被定義是因為 MySQL 允許你在一個 DATE 或 DATETIME 列中存儲日期,這里的天或月是零。這對存儲你不知道準確的日期的一個生日的應用程序來說是極其有用的,在這種情況下,你簡單地存儲日期象 1999-00-00 或 1999-01-00。(當然你不能期望從函數(shù)如 DATE_SUB() 或 DATE_ADD() 得到類似以這些日期的正確值)。
返回當前日期和時間
通過函數(shù) GETDATE(),你可以獲得當前的日期和時間。例如,
CURDATE() 返回當前日期
CURRENT_DATE
以 YYYY-MM-DD 或 YYYYMMDD 格式返回今天日期值,取決于函數(shù)是在一個字符串還是數(shù)字上下文被使用。
select CURDATE();
+————+
| CURDATE() |
+————+
| 2001-02-20 |
+————+
mysql select CURDATE() + 0;
+————-+
| CURDATE()+0 |
+————-+
| 20010220 |
+————-+
CURTIME() 返回當前時間
以 HH:MM:SS 或 HHMMSS 格式返回當前時間值,取決于函數(shù)是在一個字符串還是在數(shù)字的上下文被使用。
mysql select CURTIME();
+———–+
| CURTIME() |
+———–+
| 10:42:38 |
+———–+
mysql select CURTIME() + 0;
+————-+
| CURTIME()+0 |
+————-+
| 104525 |
+————-+
NOW() 返回當前時期和時間
NOW() 以 YYYY-MM-DD HH:MM:SS 的格式或者 YYYYMMDDHHMMSS 的格式返回日期和時間值,取決于上下文。
mysql select now();
+———————+
| now() |
+———————+
| 2001-02-20 10:45:57 |
+———————+
mysql select now()+0;
+—————-+
| now()+0 |
+—————-+
| 20010220105635 |
+—————-+
這些得到當前日期和時間的函數(shù),對于日期和時間的計算很方便,尤其是計算一個時間到現(xiàn)在的時間差。例如,在 pet 表中,我們以天為單位計算寵物的年齡:
mysql SELECT name,CURDATE()-birth FROM pet;
+———-+—————–+
| name | CURDATE()-birth |
+———-+—————–+
| Fluffy | 80016 |
| Claws | 69903 |
| Buffy | 119707 |
| Chirpy | 29309 |
| Fang | 109393 |
| Bowser | 109389 |
| Whistler | 39011 |
| Slim | 49791 |
| Puffball | 19890 |
+———-+—————–+
自動記錄數(shù)據(jù)的改變時間
TIMESTAMP 列類型提供一種類型,TIMESTAMP 值可以從 1970 的某時的開始一直到 2037 年,精度為一秒,其值作為數(shù)字顯示。你可以使用它自動地用當前的日期和時間標記 INSERT 或 UPDATE 的操作。如果你有多個 TIMESTAMP 列,只有第一個自動更新。
自動更新第一個 TIMESTAMP 列在下列任何條件下發(fā)生:
列沒有明確地在一個 INSERT 或 LOAD DATA INFILE 語句中指定。
列沒有明確地在一個 UPDATE 語句中指定且一些另外的列改變值。(注意一個 UPDATE 設置一個列為它已經(jīng)有的值,這將不引起 TIMESTAMP 列被更新,因為如果你設置一個列為它當前的值,MySQL 為了效率而忽略更改。)
你明確地設定 TIMESTAMP 列為 NULL.
除第一個以外的 TIMESTAMP 列也可以設置到當前的日期和時間,只要將列設為 NULL,或 NOW()。
例如,創(chuàng)建如下的表:
mysql CREATE TABLE student
– (
– id int,
– name char(16),
– english tinyint,
– chinese tinyint,
– history tinyint,
– time timestamp
–
向表中插入記錄,可以查看效果:
mysql INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);
查看記錄的存儲情況:
mysql SELECT * FROM student;
+——+———+———+———+———+—————-+
| id | name | english | chinese | history | time |
+——+———+———+———+———+—————-+
| 11 | Tom | 66 | 93 | 67 | 20010220123335 |
+——+———+———+———+———+—————-+
你可以看到 time 列紀錄下了數(shù)據(jù)錄入時的時間值。如果你更新改記錄,在查看操作的結果:
mysql UPDATE student SET english=76 WHERE id=11;
mysql SELECT * FROM student;
+——+——+———+———+———+—————-+
| id | name | english | chinese | history | time |
+——+——+———+———+———+—————-+
| 11 | Tom | 76 | 93 | 67 | 20010220125736 |
+——+——+———+———+———+—————-+
可以清楚的看到,time 列的時間被自動更改為修改記錄的時間。
有時候你希望不更改任何值,也能打到修改 TIMESTAMP 列的值,這時只要設置該列的值為 NULL,MySQL 就可以自動更新 TIMESTAMP 列的值:
mysql UPDATE student SET time=NULL WHERE id=11;
mysql select * from student where id=11;
+——+——+———+———+———+—————-+
| id | name | english | chinese | history | time |
+——+——+———+———+———+—————-+
| 11 | Tom | 76 | 93 | 67 | 20010220130517 |
+——+——+———+———+———+—————-+
通過明確地設置希望的值,你可以設置任何 TIMESTAMP 列為不同于當前日期和時間的值,即使對第一個 TIMESTAMP 列也是這樣。例如,如果,當你創(chuàng)建一個行時,你想要一個 TIMESTAMP 被設置到當前的日期和時間,但在以后無論何時行被更新時都不改變,你可以使用這樣使用:
讓 MySQL 在行被創(chuàng)建時設置列,這將初始化它為當前的日期和時間。
當你執(zhí)行隨后的對該行中其他列的更改時,明確設定 TIMESTAMP 列為它的當前值。
例如,當你在修改列時,可以把原有的值付給 TIMESTAMP 列:
mysql UPDATE student SET english=66,time=time WHERE id=11;
mysql select * from student where id=11;
+——+——+———+———+———+—————-+
| id | name | english | chinese | history | time |
+——+——+———+———+———+—————-+
| 11 | Tom | 66 | nb
看完上述內容,你們對 MySQL 中怎么操作日期和時間有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。