当前位置: 首页 >数据库 > 数据库查询时日期的转换

数据库查询时日期的转换

  首先简单说明一下,laravel框架中查询并打印sql语句的办法,不管任何时候由于sql语句报错时,都可以先打印一下,分析一下是什么原因造成的错误

①引入laravel框架DB类  use Illuminate\Support\Facades\DB;②开启框架日志记录  DB::connection()->enableQueryLog();③条件,即要查询的sql语句  User::all();④输出打印所有的日志(sql)  dd(DB::getQueryLog());

 

回归正题:这里遇到的问题是查询语句中的时间戳的转换(laravel查询构建器);

初试:时间分组的显示,这里使用的原生查询方法(DB:raw()),先使用from_unixtime( ),时间戳转换为日期格式,然后使用格式化函数,将日期改为需要显示的日期并进行分组.

  $summary = Article::query()->select(DB::raw("DATE_FORMAT(from_unixtime(art_time),'%Y-%m') as time"))->groupBy('art_time')->orderBy('art_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;}

  这里开始报错:

数据库查询时日期的转换 _ JavaClub全栈架构师技术笔记

  这个错误很简单,查询where条件不能取前面别名,数据库没有这个字段自然会报错,然后修改了语句

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;}

  再次查询,发现为空,于是打印了sql语句如下:

数据库查询时日期的转换 _ JavaClub全栈架构师技术笔记

     没有报错,查询为空,可以想到是由于where条件不匹配的原因导致的,然后发现date_format格式化后应该为一个字符串,这里显示的数字,自然不会查询出来。于是修改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;}

   到此,此问题解决。

 

后续:在自己看完打印出来的sql语句后,觉得根本没有问题,多次修改sql语句后仍无查到信息,由于对mysql查询的不了解以及之前不怎么使用date_format(),认为where条件不能这样写(where date_format(from_unixtime(art_time),'%Y-%m') = .$v->time),即where条件中对字段进行修饰,于是想存的时间戳太过麻烦,便直接到数据库增加一个字段用来存放时间日期格式,更新这个字段内容的时候使用了之前讲的通过表格sublime操作mysql的简便方法。做了20条语句:

数据库查询时日期的转换 _ JavaClub全栈架构师技术笔记

数据库查询时日期的转换 _ JavaClub全栈架构师技术笔记

  到sql编辑器中运行sql语句,运行成功。看了看这条语句,又想了想之前的那条,觉得即使在where条件中加date_format应该也是可以的。

 

再次尝试:直接在sql编辑器中尝试了以下两条语句,运行,成功了

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';

  突然发现这里的date_format等于的是一个字符串,发现了原因,到查询为空的语句中加上了引号,终于解决了问题。

 

作者:进阶丶xiao路
来源链接:https://www.cnblogs.com/yaradish/p/9497487.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118104.html

标签:group by
分享给朋友:

“数据库查询时日期的转换” 的相关文章