這篇文章主要介紹了mysql查詢時(shí)間段的方法,包括了傳統(tǒng)的針對(duì)時(shí)間字段的查詢方法與unix查詢的查詢技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了mysql查詢時(shí)間段的方法。分享給大家供大家參考。具體方法如下:
MySql查詢時(shí)間段的方法未必人人都會(huì),下面為您介紹兩種MySql查詢時(shí)間段的方法,供大家參考。
MySql的時(shí)間字段有date、time、datetime、timestamp等,往往我們?cè)诖鎯?chǔ)數(shù)據(jù)的時(shí)候?qū)⒄麄€(gè)時(shí)間存在一個(gè)字段中,采用datetime類型;也可能采用將日期和時(shí)間分離,即一個(gè)字段存儲(chǔ)date,一個(gè)字段存儲(chǔ)時(shí)間time。無(wú)論怎么存儲(chǔ),在實(shí)際應(yīng)用中,很可能會(huì)出現(xiàn)包含“時(shí)間段”類型的查詢,比如一個(gè)訪問記錄數(shù)據(jù)庫(kù),需要統(tǒng)計(jì)每天的訪問數(shù)量,這個(gè)每天就是一個(gè)時(shí)間段。下面介紹MySql查詢時(shí)間段的兩種常見方法,其他數(shù)據(jù)庫(kù)也可以類似實(shí)現(xiàn)。
方法一:傳統(tǒng)方式,即指定開始時(shí)間和結(jié)束時(shí)間,用”between”或者””來(lái)建立條件,比如查詢2010年3月1日到2010年3月2日的數(shù)據(jù)條數(shù),則可以使用
?代碼如下:
select?count(*)?from?sometable?where?datetimecolumn>='2010-03-01?00:00:00'?and?datetimecolumn<p>但是,這種方法由于時(shí)間不是<a href="http://www.php.cn/php/php-tp-demand.html" target="_blank">查詢</a>型數(shù)據(jù),所以在比較的時(shí)候效率較低,所以如果數(shù)據(jù)量較大,可以將時(shí)間轉(zhuǎn)換為整數(shù)型的UNIX時(shí)間戳,這就是方法二。</p><p><strong>方法二:UNIX時(shí)間戳</strong>,每個(gè)時(shí)間對(duì)應(yīng)了一個(gè)唯一的UNIX時(shí)間戳,該時(shí)間戳是從'1970-01-01 00:00:00' 為0開始計(jì)時(shí),每秒增加1。MySql內(nèi)置了傳統(tǒng)時(shí)間和UNIX時(shí)間的互換<a href="http://www.php.cn/php/php-tp-demand.html" target="_blank">查詢</a>,分別為:</p><p>UNIX_TIMESTAMP(datetime)<br>FROM_UNIXTIME(unixtime)</p><p>比如運(yùn)行</p><p class="codetitle">?代碼如下:</p><pre class="brush:sql;toolbar:false">SELECT?UNIX_TIMESTAMP('2010-03-01?00:00:00')
返回1267372800
運(yùn)行
?代碼如下:
SELECT?FROM_UNIXTIME(1267372800)
返回’2010-03-01 00:00:00′
于是,我們可以將時(shí)間字段里的數(shù)據(jù)替換為整型的UNIX時(shí)間,這樣,比較時(shí)間就成為整數(shù)比較了,建立查詢后能大大提高效率。在查詢的時(shí)候,需要把起點(diǎn)時(shí)間和結(jié)尾時(shí)間分別轉(zhuǎn)換為UNIX時(shí)間再進(jìn)行比較,如:
?代碼如下:
select?count(*)?from?sometable?where?datetimecolumn>=UNIX_TIMESTAMP('2010-03-01?00:00:00')?and?datetimecolumn<unix_timestamp><p>也可以在調(diào)用程序中先轉(zhuǎn)換為UNIX時(shí)間再傳入MySql,總之這種方式有利于快速查詢時(shí)間段,不過顯示時(shí)間則需要再反轉(zhuǎn)一次。</p></unix_timestamp>