用date_format函數(shù)
為璧山等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及璧山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站制作、璧山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
比如要統(tǒng)計(jì)10月以后每天注冊(cè)的用戶人數(shù)
時(shí)間用createTime,用戶就用uid表示
select date_format(createtime,'%Y-%m-%d') as day,count(distinct uid) from tableName
where createtime='2014-10-01' group by day;
如果數(shù)據(jù)庫(kù)是datetime類型,那么可以:
DateFormate df = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
Date d = df.parse(str);
其實(shí)數(shù)據(jù)庫(kù)存時(shí)間的話,完全可以使用字符串,這樣比較方便,而且會(huì)避免轉(zhuǎn)化帶來(lái)的錯(cuò)誤,在頁(yè)面上展示的時(shí)候直接使用substring來(lái)截取你想要的東西。
Mysql中經(jīng)常用來(lái)存儲(chǔ)日期的數(shù)據(jù)類型有三種:Date、Datetime、Timestamp。
【1】Date數(shù)據(jù)類型:用來(lái)存儲(chǔ)沒(méi)有時(shí)間的日期。Mysql獲取和顯示這個(gè)類型的格式為“YYYY-MM-DD”。支持的時(shí)間范圍為“1000-00-00”到“9999-12-31”。
【2】Datetime類型:存儲(chǔ)既有日期又有時(shí)間的數(shù)據(jù)。存儲(chǔ)和顯示的格式為 “YYYY-MM-DD HH:MM:SS”。支持的時(shí)間范圍是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
【3】Timestamp類型:也是存儲(chǔ)既有日期又有時(shí)間的數(shù)據(jù)。存儲(chǔ)和顯示的格式跟Datetime一樣。支持的時(shí)間范圍是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
擴(kuò)展資料
切記不要用字符串存儲(chǔ)日期
這種存儲(chǔ)日期的方式的優(yōu)點(diǎn)還是有的,就是簡(jiǎn)單直白,容易上手。但是,這是不正確的做法,主要會(huì)有下面兩個(gè)問(wèn)題:
1、字符串占用的空間更大。
2、字符串存儲(chǔ)的日期比較效率比較低(逐個(gè)字符進(jìn)行比對(duì)),無(wú)法用日期相關(guān)的 API 進(jìn)行計(jì)算和比較。
DateTime 類型沒(méi)有時(shí)區(qū)信息的
DateTime 類型是沒(méi)有時(shí)區(qū)信息的(時(shí)區(qū)無(wú)關(guān))?,DateTime 類型保存的時(shí)間都是當(dāng)前會(huì)話所設(shè)置的時(shí)區(qū)對(duì)應(yīng)的時(shí)間。
當(dāng)你的時(shí)區(qū)更換之后,比如你的服務(wù)器更換地址或者更換客戶端連接時(shí)區(qū)設(shè)置的話,就會(huì)導(dǎo)致你從數(shù)據(jù)庫(kù)中讀出的時(shí)間錯(cuò)誤。不要小看這個(gè)問(wèn)題,很多系統(tǒng)就是因?yàn)檫@個(gè)問(wèn)題鬧出了很多笑話。
Timestamp 和時(shí)區(qū)有關(guān)。Timestamp 類型字段的值會(huì)隨著服務(wù)器時(shí)區(qū)的變化而變化,自動(dòng)換算成相應(yīng)的時(shí)間,說(shuō)簡(jiǎn)單點(diǎn)就是在不同時(shí)區(qū),查詢到同一個(gè)條記錄此字段的值會(huì)不一樣。
select
*
from
shipmentlist,shipmentscrib
where
(shipmentlist.shipmentlistno=shipmentscrib.shipmentlistno)
and (year(shipmentlist.shipmentdate)=year(now()))
and (month(shipmentlist.shipmentdate)=month(now())
or month(shipmentlist.shipmentdate)=month(now())-1 )
ORDER BY shipmentdate DESC
格式化了一下你的SQL,分析一下。
假如今天是 2012年1月1日。
那么上面的條件。
將變?yōu)?/p>
year = 2012 and month = 1 OR month = 0
其實(shí),對(duì)于 查詢 當(dāng)月和上一月
相當(dāng)于
shipmentlist.shipmentdate = 上月的1號(hào)
AND shipmentlist.shipmentdate 下月的1號(hào)
LAST_DAY(NOW()) 可以獲取 本月的最后一天.
DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY ) 可以獲取下月第一天。
DATE_SUB ( DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY ) INTERVAL 2 MONTH ) 可以獲取上月的1號(hào)
(也就是用 下月的1號(hào) 減少2個(gè)月,從而獲取 上月的1號(hào))
最后 SQL 修改為:
select
*
from
shipmentlist,shipmentscrib
where
(shipmentlist.shipmentlistno=shipmentscrib.shipmentlistno)
and shipmentlist.shipmentdate = DATE_SUB ( DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY ) INTERVAL 2 MONTH )
AND shipmentlist.shipmentdate DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY )
ORDER BY shipmentdate DESC