数据库查询时日期的转换

  首先简单说明一下,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;
        }

  这里开始报错:

  这个错误很简单,查询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语句如下:

  没有报错,查询为空,可以想到是由于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条语句:

  到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等于的是一个字符串,发现了原因,到查询为空的语句中加上了引号,终于解决了问题。

原文地址:https://www.cnblogs.com/yaradish/p/9497487.html

时间: 2024-08-07 01:49:11

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

数据库查询时,查询数字或者英文可以,查询中文时出错

数据库查询时,查询数字或者英文可以,查询中文时出错:提示????????????:select * from szdbdb_userdata where        truename='????' Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='12670 解决办法:一般网上会说是编码问题,在配置文件my.ini修改数据库编码.当把

解决数据库查询时Null的问题(如SUM函数)

select ISNULL(sum(字段),0) from tableName;

MySQL中查询时"Lost connection to MySQL server during query"报错的解决方案

一.问题描述: mysql数据库查询时,遇到下面的报错信息: 二.原因分析: dw_user 表数据量比较大,直接查询速度慢,容易"卡死",导致数据库自动连接超时.... 三.解决办法: 方案1.在mysql配置文件[myslqd]下面添加一行设置skip-name-resolve.需要重启mysql服务. 方案2.在hosts文件内添加: ip与主机名的映射关系[这种方式不用重启] 如: 在hosts文件中添加: 127.0.0.1 localhost 其他网上的方法: 1. 代码层

jdbc执行Oracle数据库(oracle10g)Insert操作时 日期类型时间部分丢失的问题.

用ibatis执行一个Insert语句时,日期类型时间部分丢失,对应的java类型是java.util.Date.数据库对应的类型是DATE 解决办法:把java.util.Date转换成java.sql.TimeStamp 时间戳类型..

基于多种转换语义的图数据库查询

1. 摘要 因为图数据库的复杂模式和不同的信息描写叙述方式,对于非专业用户来说查询复杂的图数据库是异常困难的. 一个好的图查询引擎应该支持多种转化--同义词.缩略词.简写以及本体等等,而且应该可以对搜索结果进行一个非常好地排序. 基于此问题本文提出了一种新型的查询框架来方便用户查询,解放了为构造查询图而抓耳挠腮的用户群. 2. 应用背景 2.1 应用 图数据库也是一种流行的数据存储方式.如知识图.信息网络以及社交网络等应用的数据都存储在图数据库中.由于图数据的无模式或者模式太复杂以及信息的多种描

SQL语句优化系列四(Oracle数据库日期格式转换)

Oracle数据库日期格式转换 select sysdate from dual select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') as mydate from dual select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as mydate from dual select to_number(to_char(sysdate,'yyyymmddhh24miss')) as mydate from dual

FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中

<span style="font-size:18px;">//首先,获取数据库的路径,(如果不存在,就是我们想要存储的路径),不用担心每次都创建数据库会重复,不会的,如果没有则创建,有了就不会再重复创建: //接下来,我们要制表,首先我们先查看我们的表是否已经存在,方法在下面代码中:如果存在则跳过,不存在则创建</span> -(void)DataBaseInit { //获取Document文件夹下的数据库文件,没有则创建 NSString *dbPath

SpringMVC——项目启动时从数据库查询数据

SpringMVC项目中遇到这样的问题: 1.很多数据字典需要从数据库中查询: 2.懒得修改SQL语句: 3.想在项目中声明静态变量存储数据字典,但是希望这个字典可以在项目启动时进行加载. 当遇到这样的问题时,可以通过实现org.springframework.beans.factory.InitializingBean接口进行实现这一功能. 只需要实现afterPropertiesSet()方法就将在项目扫描完注解时调用这一方法,在这个方法内调用数据库查询的方法,查出所有数据字典,并保存在静态

hibernate映射实体类查询时数据库空字段赋值给实体类报错的问题

因为一直报实体类空异常,去网上查了资料只查到了并没有查到数据库空值时不给实体类赋值的属性,只有这两个属性 这两个属性时设置 实体类有空字段插入或更新 数据库时空属性为默认值 异常 org.hibernate.InvalidMappingException: Could not parse mapping document from resource cn/pojo/EmpDao.xml at org.hibernate.cfg.Configuration.addResource(Configur