MySQL sysdate()函數(shù)的具體使用
在本教程中,您將了解MySQL SYSDATE()函數(shù)及其注意事項(xiàng)。
MySQL SYSDATE函數(shù)介紹下面說(shuō)明了SYSDATE()函數(shù)的語(yǔ)法:
SYSDATE(fsp);
如果函數(shù)用于字符串上下文或YYYYMMDDHHMMSS格式,則SYSDATE()函數(shù)將返回當(dāng)前日期時(shí)間,格式為“YYYY-MM-DD HH:MM:SS”的值,以防在函數(shù)用于數(shù)字上下文。
SYSDATE()函數(shù)接受一個(gè)可選參數(shù)fsp,它確定結(jié)果是否應(yīng)該包含從0到6的小數(shù)秒精度。
請(qǐng)參見(jiàn)以下示例 -
mysql> SELECT SYSDATE(); +---------------------+ | SYSDATE() | +---------------------+ | 2017-08-10 20:43:16 | +---------------------+ 1 row in set
如果您傳遞fsp參數(shù),則結(jié)果將包括小數(shù)秒精度,如以下示例所示:
mysql> SELECT SYSDATE(3); +-------------------------+ | SYSDATE(3) | +-------------------------+ | 2017-08-10 20:43:46.985 | +-------------------------+ 1 row in set
SYSDATE 與 NOW 比較
請(qǐng)考慮以下示例 -
mysql> SELECT SYSDATE(), NOW(); +---------------------+---------------------+ | SYSDATE() | NOW() | +---------------------+---------------------+ | 2017-08-10 20:44:38 | 2017-08-10 20:44:38 | +---------------------+---------------------+ 1 row in set
似乎SYSDATE()和NOW()函數(shù)都返回一個(gè)相同的值,它是執(zhí)行語(yǔ)句時(shí)當(dāng)前日期和時(shí)間。
然而,SYSDATE()函數(shù)實(shí)際上返回執(zhí)行時(shí)的時(shí)間,而NOW()函數(shù)返回一個(gè)常量時(shí)間,該語(yǔ)句開(kāi)始執(zhí)行。
請(qǐng)參閱以下查詢:
mysql> SELECT NOW(), SLEEP(5), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(5) | NOW() | +---------------------+----------+---------------------+ | 2017-08-10 20:46:51 | 0 | 2017-08-10 20:46:51 | +---------------------+----------+---------------------+ 1 row in set
在這個(gè)例子中,我們使用SLEEP()函數(shù)暫停查詢5秒。 在同一個(gè)語(yǔ)句中,NOW()函數(shù)總是返回一個(gè)常量,它是語(yǔ)句開(kāi)始的時(shí)間。
我們將NOW()函數(shù)更改為SYSDATE()函數(shù):
mysql> SELECT SYSDATE(), SLEEP(5), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(5) | SYSDATE() | +---------------------+----------+---------------------+ | 2017-08-10 20:48:14 | 0 | 2017-08-10 20:48:19 | +---------------------+----------+---------------------+ 1 row in set
在同一個(gè)語(yǔ)句中,SYSDATE()函數(shù)返回反映SYSDATE()函數(shù)執(zhí)行時(shí)間的不同時(shí)間值。
因?yàn)镾YSDATE()函數(shù)是非確定性的,索引不能用于評(píng)估求值引用它的表達(dá)式。
為了演示這個(gè),我們創(chuàng)建一個(gè)名為tests的表,并將一些數(shù)據(jù)插入到這個(gè)表中。
CREATE TABLE tests ( ? ? id INT AUTO_INCREMENT PRIMARY KEY, ? ? t DATETIME UNIQUE ); INSERT INTO tests(t)? WITH RECURSIVE times(t) AS (? ? ? SELECT now() - interval 1 YEAR t ? ? ? ? UNION ALL? ? ? SELECT t + interval 1 hour ? ? FROM times ? ? WHERE t < now()? ) SELECT t FROM times;
請(qǐng)注意,我們使用遞歸CTE來(lái)生成時(shí)間序列。 CTE從MySQL 8.0開(kāi)始才有的功能。
因?yàn)閠列有唯一索引,所以下列查詢應(yīng)該執(zhí)行得很快:
SELECT id, t FROM tests WHERE t >= SYSDATE() - INTERVAL 1 DAY;
但是,需要15ms才能完成。讓我們使用EXPLAIN語(yǔ)句來(lái)看看細(xì)節(jié)。
EXPLAIN SELECT id, t FROM tests WHERE t >= SYSDATE() - INTERVAL 1 DAY;
執(zhí)行上面分析語(yǔ)句,得到類似以下結(jié)果 -
原來(lái),MySQL必須掃描表中的所有行才能獲取數(shù)據(jù)。該索引無(wú)法使用。
如果在查詢中將SYSDATE()更改為NOW()函數(shù):
SELECT id, t FROM tests WHERE t >= NOW() - INTERVAL 1 DAY;
使用NOW()函數(shù),索引已被用于查詢數(shù)據(jù),如下面的EXPLAIN結(jié)果所示:
EXPLAIN SELECT id, t FROM tests WHERE t >= NOW() - INTERVAL 1 DAY;
請(qǐng)注意,MySQL為您提供了--sysdate-is-now選項(xiàng),可以使SYSDATE()函數(shù)的行為與NOW()函數(shù)相同。
MySQL Sysdate函數(shù)的注意事項(xiàng)
1、MySQL Sysdate函數(shù)不支持傳遞參數(shù)。
2、MySQL Sysdate函數(shù)在不同的操作系統(tǒng)上返回的時(shí)間戳可能會(huì)有所不同。
3、MySQL Sysdate函數(shù)返回的日期和時(shí)間戳基于系統(tǒng)時(shí)鐘。
總結(jié)
到此這篇關(guān)于MySQL sysdate()函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)MySQL sysdate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段(sql語(yǔ)句)
這篇文章主要介紹了Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段,本文給出了sql語(yǔ)句,感興趣的朋友可以跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05mysql服務(wù)1067錯(cuò)誤多種解決方案分享
今天我的mysql服務(wù)器突然出來(lái)了1067錯(cuò)誤提示,無(wú)法正常啟動(dòng)了,我今天從網(wǎng)上找尋了大量的解決mysql服務(wù)1067錯(cuò)誤的辦法,有需要的朋友可以看看2012-03-03MySQL9.0.1安裝教程的實(shí)現(xiàn)示例
本文主要介紹了MySQL軟件的下載、解壓、環(huán)境變量配置、初始化及啟動(dòng)、登錄與密碼設(shè)置等步驟,詳細(xì)說(shuō)明了每一步的操作方法,感興趣的可以了解一下2024-10-10C#列出局域網(wǎng)中可用SQL Server服務(wù)器
SQLDMO(SQL Distributed Management Objects,SQL分布式管理對(duì)象)封裝了Microsoft SQL Server數(shù)據(jù)庫(kù)中的對(duì)象。SQLDMO是Microsoft SQL Server中企業(yè)管理器所使用的應(yīng)用程序接口,所以它可以執(zhí)行很多功能,其中當(dāng)然也包括對(duì)數(shù)據(jù)庫(kù)的備份和恢復(fù)。2008-04-04mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
本篇文章是對(duì)mysql中的導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)命令以及函數(shù)、存儲(chǔ)過(guò)程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07使用mysqldump實(shí)現(xiàn)mysql備份
mysqldump客戶端可用來(lái)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)或搜集數(shù)據(jù)庫(kù)進(jìn)行備份或?qū)?shù)據(jù)轉(zhuǎn)移到另一個(gè)SQL服務(wù)器(不一定是一個(gè)MySQL服務(wù)器)。今天我們就來(lái)詳細(xì)探討下mysqldump的使用方法2016-11-11MySQL使用GROUP?BY使用技巧和注意事項(xiàng)總結(jié)
GROUP?BY?子句是?在MySQL?中用于將查詢結(jié)果按照指定的列或表達(dá)式進(jìn)行分組的關(guān)鍵字,它通常與聚合函數(shù)一起使用,能夠?qū)γ總€(gè)分組進(jìn)行統(tǒng)計(jì)或計(jì)算,本文給大家總結(jié)了MySQL使用GROUP?BY使用技巧和注意事項(xiàng),需要的朋友可以參考下2024-05-05