拼接日期
背景:从数据库导出日志数据到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')
本文探讨了在处理大量日志数据时遇到的Java内存溢出问题,提出了分段查询和调整查询时间间隔的解决方案。在Oracle SQL中,通过to_char函数和日期运算实现了动态改变日期,对比了使用'+'和'interval'的不同效果,并提到了add_months函数的特性。此外,还介绍了字符串拼接的两种方法:'||'操作符和concat函数的使用。
814

被折叠的 条评论
为什么被折叠?



