mysql 查询时间转换_数据库查询时日期的转换
首先簡單說明一下,laravel框架中查詢并打印sql語句的辦法,不管任何時(shí)候由于sql語句報(bào)錯(cuò)時(shí),都可以先打印一下,分析一下是什么原因造成的錯(cuò)誤
①引入laravel框架DB類useIlluminate\Support\Facades\DB;
②開啟框架日志記錄
DB::connection()->enableQueryLog();
③條件,即要查詢的sql語句User::all();
④輸出打印所有的日志(sql)
dd(DB::getQueryLog());
回歸正題:這里遇到的問題是查詢語句中的時(shí)間戳的轉(zhuǎn)換(laravel查詢構(gòu)建器);
初試:時(shí)間分組的顯示,這里使用的原生查詢方法(DB:raw()),先使用from_unixtime( ),時(shí)間戳轉(zhuǎn)換為日期格式,然后使用格式化函數(shù),將日期改為需要顯示的日期并進(jìn)行分組.
$summary = Article::query()->select(DB::raw("DATE_FORMAT(from_unixtime(art_time),‘%Y-%m‘) as time"))->groupBy(‘a(chǎn)rt_time‘)->orderBy(‘a(chǎn)rt_time‘,‘desc‘)->get();
接下來需要將同一日期下的文章填到上面得到的日期下
foreach ($summary as $v) {$childart = DB::select("select DATE_FORMAT(from_unixtime(art_time),‘%Y‘) as sumtime,art_id,art_title from blog_article where sumtime =".$v->time);$v->childart = $childart;
}
這里開始報(bào)錯(cuò):
這個(gè)錯(cuò)誤很簡單,查詢where條件不能取前面別名,數(shù)據(jù)庫沒有這個(gè)字段自然會(huì)報(bào)錯(cuò),然后修改了語句
foreach ($summary as $v) {$childart = DB::select("select DATE_FORMAT(from_unixtime(art_time),‘%Y‘) as sumtime,art_id,art_title from blog_article where date_format(from_unixtime(art_time),‘%Y-%m‘)= ".$v->time);print_r(DB::getQueryLog());
dd($childart);$v->childart = $childart;
}
再次查詢,發(fā)現(xiàn)為空,于是打印了sql語句如下:
沒有報(bào)錯(cuò),查詢?yōu)榭?#xff0c;可以想到是由于where條件不匹配的原因?qū)е碌?#xff0c;然后發(fā)現(xiàn)date_format格式化后應(yīng)該為一個(gè)字符串,這里顯示的數(shù)字,自然不會(huì)查詢出來。于是修改sql語句
foreach ($summary as $v) {$childart = DB::select("select DATE_FORMAT(from_unixtime(art_time),‘%Y‘) as sumtime,art_id,art_title from blog_article where date_format(from_unixtime(art_time),‘%Y-%m‘) = ‘".$v->time."‘");dd($childart);$v->childart = $childart;
}
到此,此問題解決。
后續(xù):在自己看完打印出來的sql語句后,覺得根本沒有問題,多次修改sql語句后仍無查到信息,由于對mysql查詢的不了解以及之前不怎么使用date_format(),認(rèn)為where條件不能這樣寫(where date_format(from_unixtime(art_time),‘%Y-%m‘) = .$v->time),即where條件中對字段進(jìn)行修飾,于是想存的時(shí)間戳太過麻煩,便直接到數(shù)據(jù)庫增加一個(gè)字段用來存放時(shí)間日期格式,更新這個(gè)字段內(nèi)容的時(shí)候使用了之前講的通過表格sublime操作mysql的簡便方法。做了20條語句:
到sql編輯器中運(yùn)行sql語句,運(yùn)行成功??戳丝催@條語句,又想了想之前的那條,覺得即使在where條件中加date_format應(yīng)該也是可以的。
再次嘗試:直接在sql編輯器中嘗試了以下兩條語句,運(yùn)行,成功了
update blog_article set summary =date_format(from_unixtime(art_time),‘%Y-%m‘) where art_id =8;
select * from blog_article where date_format(from_unixtime(art_time),‘%Y-%m‘) = ‘2018-08‘;
突然發(fā)現(xiàn)這里的date_format等于的是一個(gè)字符串,發(fā)現(xiàn)了原因,到查詢?yōu)榭盏恼Z句中加上了引號(hào),終于解決了問題。
總結(jié)
以上是生活随笔為你收集整理的mysql 查询时间转换_数据库查询时日期的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 选择 播放器,Andro
- 下一篇: squid mysql认证_Squid