在oracle数据库插入日期时格式不对
insert into HrmStatusHistory
(resourceid, changedate, oldjobtitleid, changereason, type_n, operator)
values
(365, to_date('2014-07-01', 'YYYY-MM-DD'), 134, 'DML自动更新', 2, 1)
但是通过sql查询这个changedate,显示的却是: 01-7月 -14
是什么问题啊? 展开
在oracle数据库插入日期时格式不对,修改办法如下:
1、使用具有日期和时间格式的表来查询相关数据。
2、查询指定日期(2019/03/04)的数据。 默认值是周期与0点0分开计算。
3、如果要指定开始计算的次数,则上述句点语法将更改为OUT_PROCESS_TIME>TO_DATE('2019/03/04 10:00:00','YYYY/MM/DD HH24/MI/SS')。
4、第一步是找到定义的时间单位。
5、在数据库中找到此时间函数的定义。 这是一个参数集。 将使用数据库的相关整数转换。 它通常位于sys_base表中。
6、work_time<14*60/10,这里14表示14点,即下午2点。60是每小时60分钟设置的公共值,即上面sys_base表中的时间值。
按照上述操作,便可以解决该问题。
1、我们以一个一个带有日期和时间格式的表来进行相关数据查询。
2、查询指定日期(2019/03/04)的数据,默认是这个时期从0点0分开始计算。
3、如果要指定从几点几分开始计算,则讲上面的时间段语法修改为:OUT_PROCESS_TIME>TO_DATE('2019/03/04 10:00:00','YYYY/MM/DD HH24/MI/SS')。
4、首先要找到时间的定义单位。
5、在数据库中找到定义这个时间函数,这里是设置了一个参数,数据库的相关整数转换都会用到。一般会发在sys_base表中了。
6、work_time<14*60/10 这里14表示14时也就是下午两点,60是一小时60分钟10是设定的公共值,也就是前面sys_base表中的时间值。
听你这说,我进去看了下,CHANGEDATE N CHAR(10) 这代表是char类型吧?
但是为什么我在insert后,2014-07-01插入数据库后,数值变成2006了。
2014-07-01要用单引号
alter system setnls_date_language='ENGLISH';
我们先不管如果显示,因为可能只是工具显示地有问题,我们通过 where 语句来确认它是否正确?
比如: where changedate between trunc(current_date) - 7 and trunc(current_date) + 1;
让你瞧瞧这个 bug,当格式对不上数据时它JDK并不抛出异常而是给出一个错误的日期呢。观察这个错误,看上去似乎是它看成了 "2014.-0.7-",因此解释成了 2014 年0月7日,这个0月解释成了前一年的12月,也就是2013.12.07 日。
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMdd");
java.util.Date date = format.parse("2014-07-01");
java.sql.Date ko = new java.sql.Date(date.getTime());
System.out.println("Date :" + ko);
结果显示的是:
Date :2013-12-07
因此呢,工具把数据显示出来这个过程可能有问题。就像我们未意识到 SimpleDateFormat.parse 不提醒格式错误一样。