oracle数据库中对多个字段进行合并

1.背景

在有时候会有这样的需求:表中的时间是年月日分开存在不同的字段中的,现在需要将年月日一起查,但前端传来的就是一个年月日完整的时间,如何解决?

2.分析

这时候思路有两个:1.在后端代码中对年月日数据进行拆分,然后再执行sql找到符合年月日字段的数据;2.直接将数据库中年月日合并成一个完整时间,然后再和前端时间参数比较。给我的感觉最好的方案就是第二种,我接下来就使用第二种方案解决这个问题(注意我是用的是oracle数据库)

3.具体实现sql代码以及解释

比如我现在有一个商品表goods,这个表有生产日期,但是是分开存的:year_info,month_info,day_info分别表示年月日,我现在需要查2022年5月17日这天生产的商品名字。

select good_name from goods where to_date(concat(concat(year_info,month_info),day_info),'yyyyMMdd')=to_date('2022-5-17','yyyy-MM-dd')

我解释哈上边的代码:因为oracle中的concat函数最多只能两个参数拼接,虽然可以使用||进行多个字段拼接,我不推荐,还是concat好一些,所以只能使用concat的嵌套来实现多个参数的拼接,这里拼接年,月,日的字段就是使用concat嵌套。这里使用了todate的函数,这里稍微解释哈:oracle中常用的时间处理函数有两个,todate和tochar函数,todate的效果是将字符串类型的时间(也可以是时间格式的时间2022-5-17变换成2022/5/17)转化为时间格式的时间,比如:‘2022-5-17’这个字符串转化为格林时间,tochar的效果是将时间格式的变成字符串格式。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐