pgSQL,时间类型timestamp结合mybatis小记

背景:项目是用springboot+mybatis重构的,原先是用spring.数据库使用的是pgSQL一开始就统一时间参数接收和数据库都使用timestamp类型,后期带来了不算太大的麻烦

需求一,查询所有的项目表数据,查询条件有具体某一天新建的项目

SELECT

            p_id,p_name,create_time from project

                WHERE

                     1=1      

<if test="createTime != null and createTime != '' ">
    AND to_char(create_time, 'YYYY-MM-DD') = to_char(to_date(#{createTime},'YYYY-MM-DD'), 'YYYY-MM-DD')
</if>

上面是查询出哪些字段,下面的if标签是mybatis判断,如果时间没有给就不执行if标签里的sql语句,

createTime是传递进来的参数,create_time是数据库字段数据,

timestamp是时间戳,一般长这样1564651689000,java底层是字符串.

首先to_date(#{createTime},'YYYY-MM-DD') 我要传递进来的时间参数转换成date类型

to_char(to_date(#{createTime},'YYYY-MM-DD'), 'YYYY-MM-DD')  再然后把它转换成字符类型'YYYY-MM-DD'格式

最后一步就是把数据库的字段转换成字符类型和传递进来的参数字符类型比较.

to_char(create_time, 'YYYY-MM-DD') = to_char(to_date(#{createTime},'YYYY-MM-DD'), 'YYYY-MM-DD')

总结:其实思路你也应该能明白了.我把参数时间转换成时间格式的Date,再按照一个格式转换成字符.再把数据库的时间转换成字符进行比较,数据库的字符比较不就是'='嘛!

上面的问题解决了,那么又一个新需求来了.产品狗说我不想要某一天的了,我想要一个区间内的,精确到 /天,心里一万只草拟吗

需求二,查询所有的项目表数据,查询条件有具体某一天到某一天的区间内项目

SELECT

            p_id,p_name,create_time from project

                WHERE

                     1=1     

<if test=" startTime != null and endTime != null ">
    AND to_date(to_char(create_time, 'YYYY-MM-DD') , 'YYYY-MM-DD')
    BETWEEN
    to_date(#{startTime}, 'YYYY-MM-DD' )
    AND
    to_date(#{endTime}, 'YYYY-MM-DD' )
</if>

好,这里我们就不废话了,和上面一样.但是这是次传各位2个参数,开始时间和结束时间.

思考:上面第一个需求是查某一天,我格式化成字符比较.那么现在区间我再格式化成字符用=来比较完全不对的.那只能在这两个时间的区间内.如果是数字用>/<比较.其实上面已经有答案了,直接比较时间.

我先把传递进来的2个时间转换成固定格式的date,用 BETWEEN ... AND来做(在.....之间)翻译过来就是,在开始时间和结束时间区间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值