MySQL培訓(xùn)課程:返回日期和時(shí)間范圍
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請(qǐng)盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請(qǐng)聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢MySQL培訓(xùn)課程:返回日期和時(shí)間范圍,當(dāng)你分析表中的數(shù)據(jù)時(shí),你也許希望取出某個(gè)特定時(shí)間的數(shù)據(jù)。我們用下面一個(gè)表來(lái)模仿一個(gè)web站點(diǎn)的記錄。
mysql> CREATE TABLE weblog
-> (
-> data float,
-> entrydate datetime
-> );
然后隨機(jī)的增加幾個(gè)數(shù)據(jù):
mysql> INSERT weblog VALUES(rand(),now());
rand()函數(shù)返回一個(gè)隨機(jī)的浮點(diǎn)值,now()函數(shù)返回當(dāng)前時(shí)間。多執(zhí)行上面語(yǔ)句幾次,得到一個(gè)作為測(cè)試的表。
最為測(cè)試你還可以增加一個(gè)值:
mysql> INSERT weblog VALUES(rand(),”2001-02-08”);
這條語(yǔ)句,插入一個(gè)entry為”2001-02-08 00:00:00”的值(假定現(xiàn)在為2001年2月8日),你可以查看這個(gè)表的值:
mysql> select * from weblog;
+-----------+---------------------+
| data | entrydate |
+-----------+---------------------+
| 0.973723 | 2001-02-08 00:00:00 |
| 0.437768 | 2001-02-08 13:57:06 |
| 0.327279 | 2001-02-08 13:57:09 |
| 0.0931809 | 2001-02-08 13:58:29 |
| 0.198805 | 2001-02-08 13:57:54 |
+-----------+---------------------+
你也許對(duì)特定的某一天中――比如說(shuō)2001年2月18日――訪問(wèn)者在你站點(diǎn)上的活動(dòng)感興趣。要取出這種類(lèi)型的數(shù)據(jù),你也許會(huì)試圖使用這樣的SELECT語(yǔ)句:
mysql> SELECT * FROM weblog WHERE entrydate="2001-02-08"
不要這樣做。這個(gè)SELECT語(yǔ)句不會(huì)返回正確的記錄――它將只返回值為2000-02-08 00:00:00的記錄,換句話說(shuō),只返回當(dāng)天零點(diǎn)零時(shí)的記錄。上面語(yǔ)句的結(jié)果為:
+----------+---------------------+
| data | entrydate |
+----------+---------------------+
| 0.973723 | 2001-02-08 00:00:00 |
+----------+---------------------+
要返回正確的記錄,你需要適用日期和時(shí)間范圍。有不止一種途徑可以做到這一點(diǎn)。
1、使用關(guān)系運(yùn)算符和邏輯運(yùn)算符來(lái)限制時(shí)間范圍
例如,下面的這個(gè)SELECT 語(yǔ)句將能返回正確的記錄:
mysql> SELECT * FROM weblog
-> WHERE entrydate>="2001-02-08" AND entrydate<"2001-02-09" ;
這個(gè)語(yǔ)句可以完成任務(wù),因?yàn)樗x取的是表中的日期和時(shí)間大于等于2001-02-08 00:00:00并小于2001-02-09 00:00:00的記錄。換句話說(shuō),它將正確地返回2000年2月8日這一天輸入的每一條記錄。 其結(jié)果為:
+-----------+---------------------+
| data | entrydate |
+-----------+---------------------+
| 0.973723 | 2001-02-08 00:00:00 |
| 0.437768 | 2001-02-08 13:57:06 |
| 0.327279 | 2001-02-08 13:57:09 |
| 0.0931809 | 2001-02-08 13:58:29 |
| 0.198805 | 2001-02-08 13:57:54 |
+-----------+---------------------+
2、另一種方法是,你可以使用LIKE來(lái)返回正確的記錄。
通過(guò)在日期表達(dá)式中包含通配符“%”,你可以匹配一個(gè)特定日期的所有時(shí)間。
這里有一個(gè)例子:
mysql> SELECT * FROM weblog WHERE entrydate LIKE '2001-02-08%' ;
這個(gè)語(yǔ)句可以匹配正確的記錄。因?yàn)橥ㄅ浞?”代表了任何時(shí)間。
+-----------+---------------------+
| data | entrydate |
+-----------+---------------------+
| 0.973723 | 2001-02-08 00:00:00 |
| 0.437768 | 2001-02-08 13:57:06 |
| 0.327279 | 2001-02-08 13:57:09 |
| 0.0931809 | 2001-02-08 13:58:29 |
| 0.198805 | 2001-02-08 13:57:54 |
+-----------+---------------------+
3、上面兩種方法的異同
由于使用關(guān)系運(yùn)算符進(jìn)行的是比較過(guò)程,時(shí)轉(zhuǎn)換成內(nèi)部的存儲(chǔ)格式后進(jìn)行的,因此,因此時(shí)間的書(shū)寫(xiě)可以不是那么嚴(yán)格要求。
例如,下面幾種寫(xiě)法是等價(jià)的:
mysql> SELECT * FROM weblog WHERE entrydate>="2001-02-08";
mysql> SELECT * FROM weblog WHERE entrydate>="2001-2-8";
mysql> SELECT * FROM weblog WHERE entrydate>="2001*02*08";
mysql> SELECT * FROM weblog WHERE entrydate>="20010208";
SELECT * FROM weblog WHERE entrydate>="2001/2/8";
而使用LIKE運(yùn)算符和模式匹配,是通過(guò)比較串值進(jìn)行的,因此必須使用標(biāo)準(zhǔn)的時(shí)間書(shū)寫(xiě)格式,YYYY-MM-DD HH-MM-SS。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級(jí)講師、Unix/Linux 資深專(zhuān)家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
