拼接日期
背景:从数据库导出日志数据到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')