首頁 > 資料庫 > mysql教程 > mysql可以比較時間嗎

mysql可以比較時間嗎

(*-*)浩
發布: 2020-09-15 13:38:23
原創
14483 人瀏覽過

在mysql中可以實現比較時間,其語句如【 SELECT testdate FROM t1 WHERE testdate >= '2018-09-12';SELECT testdate FROM t1 WHERE testdate >= 20180912;】。

mysql可以比較時間嗎

最近發現自己一直以來常用一種錯誤的方法在比較日期,例如一下語句,a欄位是一個DATETIME類型的欄位:

select a from t1 where DATEDIFF(a, &#39;2018-09-11&#39;) < 0;
登入後複製

該語句是為了查出2018-09-11 日期之前的所有記錄,但這個語句有個問題,如果a字段加了索引,用這種類型進行日期對比,會導致查詢不走索引,從而使查詢效能下降。

推薦課程:MySQL教學

mysql可以比較時間嗎

看了Mysql關於日期欄位比較的文件。在進行日期比較的時候,mysql會自動將日期轉換成數字進行比較。 where條件後,使用字串格式日期與DATE,DATETIME,TIMESTAMP,TIME類型欄位比較的時候,對字串格式要求不嚴格,你可以使用任意格式的分隔符號來表示日期,例如"2018-09- 11","2018#09#11","2018&09&11"對於mysql來說,都是相同的日期。如果沒有分隔符,例如"20180911",與"2018-09-11"或其他有分隔符號的日期,也是相同的。例如下圖

select a from t1 where a < &#39;2018#09#11&#39;;
与
select a from t1 where a < &#39;2018-09-11&#39;;
与
select a from t1 where a < &#39;20180911&#39;;
所代表的意义是相同的,都是查询日期小于2018年9月11日的数据
也就是说上图的查询语句,完全可以重写为,这么做的好处?就是会使用索引,是查询更快
select a from t1 where a < &#39;2018-09-11&#39;;
登入後複製

當日期類型欄位與字串型日期進行<,>,>=,<=,between比較的時候,Mysql會將字串型別日期轉換成長整型數字進行比較,從而加快查詢速度。

下面三種情況除外:

1,兩個表格欄位的比較;

#2,日期類型欄位與表達式比較;

3 ,使用表達式對日期類型欄位進行比較;

原因:對於以上三種情況,mysql會將日期轉換為字串進行比較。

下面的例子,都是可以正常運作的:

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

SELECT testdate FROM t1 WHERE testdate >= &#39;2018-09-12&#39;;
SELECT testdate FROM t1 WHERE testdate >= 20180912;
SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912;
SELECT testdate FROM t1 WHERE testdate >= &#39;20180912&#39;;
登入後複製

Mysql允許儲存"0000-00-00"作為DATE類型的「0」值,也稱為虛擬日期。在某些場景下比儲存NULL值更便捷。如果將一個不合法的日期值儲存到DATE類型欄位中,mysql預設儲存為"0000-00-00"。 如果不允許儲存"0"值,請啟用NO_ZERO_DATE參數。

也可使用unix_timestamp函數,將字元型的時間,轉換成unix時間戳記。

select meeting_id,meeting_name,start_time,end_time from meeting_data 
	where meeting_id REGEXP &#39;[0-9]{4}0001&#39; 
		and unix_timestamp(start_time) < unix_timestamp(NOW()) 
		and unix_timestamp(end_time) > unix_timestamp(NOW());
登入後複製

以上是mysql可以比較時間嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板