您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)MySQL中怎么操作日期和時(shí)間,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
日期和時(shí)間函數(shù)對(duì)建立一個(gè)站點(diǎn)是非常有用的。站點(diǎn)的主人往往對(duì)一個(gè)表中的數(shù)據(jù)何時(shí)被更新感興趣。通過日期和時(shí)間函數(shù),你可以在秒級(jí)跟蹤一個(gè)表的改變。
日期和時(shí)間類型是DATETIME、DATE、TIMESTAMP、TIME和YEAR。這些的每一個(gè)都有合法值的一個(gè)范圍,而“零”當(dāng)你指定確實(shí)不合法的值時(shí)被使用。注意,MySQL允許你存儲(chǔ)某個(gè)“不嚴(yán)格地”合法的日期值,例如1999-11-31,原因我們認(rèn)為它是應(yīng)用程序的責(zé)任來處理日期檢查,而不是SQL服務(wù)器。為了使日期檢查更“快”,MySQL僅檢查月份在0-12的范圍,天在0-31的范圍。上述范圍這樣被定義是因?yàn)镸ySQL允許你在一個(gè)DATE或DATETIME列中存儲(chǔ)日期,這里的天或月是零。這對(duì)存儲(chǔ)你不知道準(zhǔn)確的日期的一個(gè)生日的應(yīng)用程序來說是極其有用的,在這種情況下,你簡(jiǎn)單地存儲(chǔ)日期象1999-00-00或1999-01-00。(當(dāng)然你不能期望從函數(shù)如DATE_SUB()或DATE_ADD()得到類似以這些日期的正確值)。
返回當(dāng)前日期和時(shí)間
通過函數(shù)GETDATE(),你可以獲得當(dāng)前的日期和時(shí)間。例如,
CURDATE() 返回當(dāng)前日期
CURRENT_DATE
以YYYY-MM-DD或YYYYMMDD格式返回今天日期值,取決于函數(shù)是在一個(gè)字符串還是數(shù)字上下文被使用。
> select CURDATE();
+------------+
| CURDATE() |
+------------+
| 2001-02-20 |
+------------+
mysql> select CURDATE() + 0;
+-------------+
| CURDATE()+0 |
+-------------+
| 20010220 |
+-------------+
CURTIME() 返回當(dāng)前時(shí)間
以HH:MM:SS或HHMMSS格式返回當(dāng)前時(shí)間值,取決于函數(shù)是在一個(gè)字符串還是在數(shù)字的上下文被使用。
mysql> select CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 10:42:38 |
+-----------+
mysql> select CURTIME() + 0;
+-------------+
| CURTIME()+0 |
+-------------+
| 104525 |
+-------------+
NOW() 返回當(dāng)前時(shí)期和時(shí)間
NOW()以YYYY-MM-DD HH:MM:SS的格式或者YYYYMMDDHHMMSS的格式返回日期和時(shí)間值,取決于上下文。
mysql>select now();
+---------------------+
| now() |
+---------------------+
| 2001-02-20 10:45:57 |
+---------------------+
mysql>select now()+0;
+----------------+
| now()+0 |
+----------------+
| 20010220105635 |
+----------------+
這些得到當(dāng)前日期和時(shí)間的函數(shù),對(duì)于日期和時(shí)間的計(jì)算很方便,尤其是計(jì)算一個(gè)時(shí)間到現(xiàn)在的時(shí)間差。例如,在pet表中,我們以天為單位計(jì)算寵物的年齡:
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 |
+----------+-----------------+
自動(dòng)記錄數(shù)據(jù)的改變時(shí)間
TIMESTAMP列類型提供一種類型,TIMESTAMP值可以從1970的某時(shí)的開始一直到2037年,精度為一秒,其值作為數(shù)字顯示。你可以使用它自動(dòng)地用當(dāng)前的日期和時(shí)間標(biāo)記INSERT或UPDATE的操作。如果你有多個(gè)TIMESTAMP列,只有第一個(gè)自動(dòng)更新。
自動(dòng)更新第一個(gè)TIMESTAMP列在下列任何條件下發(fā)生:
列沒有明確地在一個(gè)INSERT或LOAD DATA INFILE語句中指定。
列沒有明確地在一個(gè)UPDATE語句中指定且一些另外的列改變值。(注意一個(gè)UPDATE設(shè)置一個(gè)列為它已經(jīng)有的值,這將不引起TIMESTAMP列被更新,因?yàn)槿绻阍O(shè)置一個(gè)列為它當(dāng)前的值,MySQL為了效率而忽略更改。)
你明確地設(shè)定TIMESTAMP列為NULL.
除第一個(gè)以外的TIMESTAMP列也可以設(shè)置到當(dāng)前的日期和時(shí)間,只要將列設(shè)為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);
查看記錄的存儲(chǔ)情況:
mysql> SELECT * FROM student;
+------+---------+---------+---------+---------+----------------+
| id | name | english | chinese | history | time |
+------+---------+---------+---------+---------+----------------+
| 11 | Tom | 66 | 93 | 67 | 20010220123335 |
+------+---------+---------+---------+---------+----------------+
你可以看到time列紀(jì)錄下了數(shù)據(jù)錄入時(shí)的時(shí)間值。如果你更新改記錄,在查看操作的結(jié)果:
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列的時(shí)間被自動(dòng)更改為修改記錄的時(shí)間。
有時(shí)候你希望不更改任何值,也能打到修改TIMESTAMP列的值,這時(shí)只要設(shè)置該列的值為NULL,MySQL就可以自動(dòng)更新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 |
+------+------+---------+---------+---------+----------------+
通過明確地設(shè)置希望的值,你可以設(shè)置任何TIMESTAMP列為不同于當(dāng)前日期和時(shí)間的值,即使對(duì)第一個(gè)TIMESTAMP列也是這樣。例如,如果,當(dāng)你創(chuàng)建一個(gè)行時(shí),你想要一個(gè)TIMESTAMP被設(shè)置到當(dāng)前的日期和時(shí)間,但在以后無論何時(shí)行被更新時(shí)都不改變,你可以使用這樣使用:
讓MySQL在行被創(chuàng)建時(shí)設(shè)置列,這將初始化它為當(dāng)前的日期和時(shí)間。
當(dāng)你執(zhí)行隨后的對(duì)該行中其他列的更改時(shí),明確設(shè)定TIMESTAMP列為它的當(dāng)前值。
例如,當(dāng)你在修改列時(shí),可以把原有的值付給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
看完上述內(nèi)容,你們對(duì)MySQL中怎么操作日期和時(shí)間有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。