溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中怎么操作日期和時(shí)間

發(fā)布時(shí)間:2021-07-27 16:41:02 來源:億速云 閱讀:188 作者:Leah 欄目:數(shù)據(jù)庫

今天就跟大家聊聊有關(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è)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(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)容。

AI