溫馨提示×

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

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

mysql時(shí)間作比較

發(fā)布時(shí)間:2020-05-23 16:35:22 來(lái)源:PHP中文網(wǎng) 閱讀:279 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

本文主要給大家介紹mysql時(shí)間作比較,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對(duì)性,對(duì)大家的參考意義還是比較大的,下面跟筆者一起了解下mysql時(shí)間作比較吧。

                                                            

看了Mysql關(guān)于日期字段對(duì)比的文檔。在進(jìn)行日期比較的時(shí)候,mysql會(huì)自動(dòng)將日期轉(zhuǎn)換成數(shù)字進(jìn)行比較。where條件后,使用字符串格式日期與DATE,DATETIME,TIMESTAMP,TIME類(lèi)型字段進(jìn)行比較的時(shí)候,對(duì)字符串格式要求不嚴(yán)格,你可以使用任意格式的分隔符來(lái)表示日期,例如"2018-09-11","2018#09#11","2018&09&11"對(duì)于mysql來(lái)說(shuō),都是相同的日期。如果沒(méi)有分隔符,例如"20180911",與"2018-09-11"或其他有分隔符的日期,也是相同的。例如下圖
select a from t1 where a < '2018#09#11';
與
select a from t1 where a < '2018-09-11';
與
select a from t1 where a < '20180911';
所代表的意義是相同的,都是查詢(xún)?nèi)掌谛∮?018年9月11日的數(shù)據(jù)
也就是說(shuō)上圖的查詢(xún)語(yǔ)句,完全可以重寫(xiě)為,這么做的好處?就是會(huì)使用索引,是查詢(xún)更快
select a from t1 where a < '2018-09-11';

當(dāng)將日期類(lèi)型字段與字符串型日期進(jìn)行<,>,>=,<=,between比較的時(shí)候,Mysql會(huì)將字符串類(lèi)型日期轉(zhuǎn)換成長(zhǎng)整型數(shù)字進(jìn)行比較,從而加快查詢(xún)速度。

下面三種情況除外:

1,兩個(gè)表格字段的對(duì)比;

2,日期類(lèi)型字段與表達(dá)式對(duì)比;

3,使用表達(dá)式對(duì)日期類(lèi)型字段進(jìn)行對(duì)比;

原因:對(duì)于以上三種情況,mysql會(huì)將日期轉(zhuǎn)換為字符串進(jìn)行比較。

下面的例子,都是可以正常運(yùn)行的:

INSERT INTO t1 (testdate) VALUES (20180912);
INSERT INTO t1 (testdate) VALUES ('20180912');
INSERT INTO t1 (testdate) VALUES ('18-09-12');
INSERT INTO t1 (testdate) VALUES ('2018.09.12');
INSERT INTO t1 (testdate) VALUES ('2018 09 12');
INSERT INTO t1 (testdate) VALUES ('0000-00-00');

SELECT testdate FROM t1 WHERE testdate >= '2018-09-12';
SELECT testdate FROM t1 WHERE testdate >= 20180912;
SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912;
SELECT testdate FROM t1 WHERE testdate >= '20180912';

Mysql允許存儲(chǔ)"0000-00-00"作為DATE類(lèi)型的“0”值,也稱(chēng)之為虛擬日期。在某些場(chǎng)景下比儲(chǔ)存NULL值更便捷。如果將一個(gè)不合法的日期值保存到DATE類(lèi)型字段中,mysql默認(rèn)存儲(chǔ)為"0000-00-00"。 如果不允許存儲(chǔ)"0"值,請(qǐng)啟用NO_ZERO_DATE參數(shù)。

也可使用unix_timestamp函數(shù),將字符型的時(shí)間,轉(zhuǎn)成unix時(shí)間戳。

select meeting_id,meeting_name,start_time,end_time from meeting_data 
	where meeting_id REGEXP '[0-9]{4}0001' 
		and unix_timestamp(start_time) < unix_timestamp(NOW()) 
		and unix_timestamp(end_time) > unix_timestamp(NOW());

看完以上關(guān)于mysql時(shí)間作比較,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識(shí)信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。


向AI問(wèn)一下細(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