内存溢出引出的Oracle字符串的拼接,日期的拼接

拼接日期

背景:从数据库导出日志数据到txt文本里,奈何数据量太大,发生了java.lang.OutOfMemoryError(内存溢出),于是就有几种方法:

	一:从数据库查数据分段查询
	二:将导出数据的条件改一下,将查询时间间隙减少

于是就打算动态的变化时间。如:现在当前时间2020-10-15,查出2020-7-15。
一开始是打算拼接日期。

拼接字符串

拼接字符串有两种方式:

一:用 “||” 符号用法如下:注(拼接的都得是字符串)
select 'a'||'-'||'b'||'-'||'c' from dual;
----------------
得出结果:a-b-c
select to_char(sysdate,'YYYY')||'-'||to_char(to_char(sysdate,'MM')-1)||'-'||to_char(sysdate,'DD') from dual;
----------------
得出结果:2020-9-15
to_char将日期转换为字符串才能拼接

问题来了

select to_char(sysdate,'YYYY')||'-'||to_char(to_char(sysdate,'MM')-12)||'-'||to_char(sysdate,'DD') from dual;
---------
得出结果:2020- -2 - 15
月份为负数,是因为它只是单纯数字减少

于是它来了

--当前时间减少3个月
 select to_char(sysdate - (interval '3' month),'YYYY-MM-DD') from dual;

当然也可以是其它如:如年(year),月(month),日(day),时(hour),分(minute),秒(second)。

有人会说oracle不是有个add_months函数吗?它也可以实现。

 select add_months(sysdate,1)from dual;
 -----------
 得出结果:2020-11-15 14:01:49

但add_months()有个可以看成是小缺陷,但也不能说是小缺陷,看用在那。
如果时间为月份的最后一天,往前推一个月,也是月末的最后一天

 select add_months(date'2020-9-30',1)from dual;
 --------
 得出结果:2020-10-31
二:用concat(x,y)函数
select concat('a','b') from dual;
----------------
得出结果:ab
但concat()函数不能同时拼接二个以上如:concat('a','b','c')
但可以嵌套如:concat(concat('a','b'),'c') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值