文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL:varchar与date类型互转,对接java数据类型String和Date

2023-09-08 07:18

关注

目录

问题现象:

问题分析:

varchar 转 date :

date 转 varchar:

 解决方法:

varchar 转 date :

date 转 varchar:


问题现象:

        今天在项目中遇到一个问题:

现象:

        调用springboot接口,根据传入的时间参数(Date类型),查询出对应的数据。

问题:

        由于数据库存的时间参数是varchar类型,因此提出:

        当参数的数据类型与数据库不一致时,如何转换数据类型并实现条件查询?


问题分析:

        首先,针对提出的问题,其实有很多解决方案:

        1、在java代码中,转换时间参数的数据类型,保持和数据库的数据类型对应(String->varchar,Date->date):

        java的时间转换工具类网上非常多,由于不是本文的重点,这里就不举例了,有兴趣的小伙伴可以上网查找一下。

        2、另一种方式就是,在执行dao层sql的时候,通过sql语句来转换时间参数的数据类型或者是数据字段的数据类型,来实现条件查询:

        这里,重点讲一下sql关于date和varchar两种数据类型之间的互相转换:

varchar 转 date 

STR_TO_DATE(varchar字段,时间格式)

如:将varchar类型的月份字段格式转为带日期的格式

        STR_TO_DATE(end_month,'%Y-%m-%d')

        带日期的值才能和 java 的Date类型做映射。 

date 转 varchar:

        DATE_FORMAT(varchar字段, 时间格式)             

如:

        DATE_FORMAT(end_month, '%Y-%m')

        有一点需要注意的就是,varchar字段本身的时间精度必须比设置的时间格式要精确!

        怎么理解呢?

        比如上面的 end_month 字段,假如它的值是:'2023-04'

        此时如果我们要将这个值的时间格式精确到日期,那时间格式必然要设置为:'%Y-%m-%d',此时若执行sql就会得到null:

        

        显然,这就是因为 '2023-04' 的精确度只到了【月份】,没有到【日期】,无法转换成更精细的时间格式(因为系统也不知道你想精确到哪一天的日期)。

        要解决这个问题也很简单,就是先加上日期,再进行转换:


 解决方法:

varchar 转 date 

STR_TO_DATE(varchar字段,时间格式)

如:将varchar类型的月份字段格式转为带日期的格式

        STR_TO_DATE(end_month,'%Y-%m-%d')

注意:带日期的值才能和 java 的Date类型做映射,否则报错。 

date 转 varchar:

        DATE_FORMAT(varchar字段, 时间格式)             

如:

        DATE_FORMAT(end_month, '%Y-%m')

注意:varchar字段本身的时间精度必须比设置的时间格式要精确!否则结果返回null。


开头的问题:

        当参数的数据类型与数据库不一致时,如何转换数据类型并实现条件查询?

回答:

        假如数据库存的是 varchar类型的字段【end_month】数据,而java中接口获取到的是 Date类型的入参【endDate】,此时要根据入参作为查询条件,获取数据库表数据,就可以执行类似如下的sql语句:

SELECT xxx字段FROM Table表WHERE end_month = Date_format(#{endDate},'%Y-%m')

解析:

        【endDate】是Java中的Date类型,作为接口入参时,需要传入至少精确到【秒级】的值,

        【end_month】是MySQL中的varchar类型,所以可以先把【endDate】转化为精确到【月份】的字符串,然后再用【end_month】字段来匹配转化后的值,从而查询出结果。

        当然也可以使用 STR_TO_DATE 函数将【end_month】字段转化精确到,和【endDate】相同的时间格式级别,然后再来匹配值,从而查询出结果。

来源地址:https://blog.csdn.net/weixin_42585386/article/details/130215791

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯