SqlServer中的datetime日期在mybatis中查询出来差两天

问题描述:

数据库中声明的字段类型是datetime,在SQL Server中执行sql语句查询出来的时间是正常的,可是通过项目mybatis查询出来比数据库的时间晚2天。

解决思路:

头一回遇到这个问题,有点蒙。使用下面语句查询下SQL Server上当前的时间:

select CONVERT(varchar(100), GETDATE(),20);

得出的时间是没问题的:

那问题出在哪里呢,上网一查,给的解决办法基本上是这样的:

解决方案一

 将数据类型从date转换成datetime,这种方式不推荐,因为表设计好之后,一般是不再去动表结构的

解决方式二(推荐使用)

 在查询所有的数据的时候进行一个sql上面的转换,convert(nvachar(100),字段),这样查出来的数据是没有问题的

解决方式三

可以替换JDBC的版本,这种方式我没有试过,就是替换JDBC的jar包,所以呢推荐是用第二种方式

第一种和第三种果断排除,我数据库中就是datetime类型,然后的我的JDBC jar是比较新的,也没问题,

然后使用方案二,结果运行报错,仔细排查才发现convert(nvachar(100),字段)中的nvachar少了个字母,准确的写法是nvarchar,改成nvarchar后,输出的时间格式不是yyyy-MM-dd HH:mm:ss,原来,SQL Server datetime转字符串大有文章,下图列出国内通俗转换:

所以MyBatis将datetime转换输出成 yyyy-MM-dd HH:mm:ss的正确写法是:

convert(nvarchar(100),CREATED_DATE,20) createdDate

这里需要提醒一下的是上面SQL中的createdDate对应实体类中相应属性,假如不加createdDate,SQL语法上没有问题,也会将时间查询出来,只是不会响应给前端接收,因此这个是万万不可缺少的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值