ORA-01830:日期格式图片在转换整个输入字符串之前结束-JAVA / Oracle

时间:2019-02-02 19:33:49

标签: java oracle

我转换我的日期输入字符串中的MM-dd-YYYY用格式为SQL timestamp格式以下查询:

DateFormat format = new SimpleDateFormat("MM-dd-YYYY", Locale.ENGLISH);
java.util.Date endDate = format.parse(myEndDateString);
endDateTimestamp = Calendar.getInstance();
endDateTimestamp.setTime(endDate);
endDateTimestamp.set(Calendar.MILLISECOND, 0);

时间戳现已按照预期的格式进行了更新。

30-DEC-18 12.00.00.000000000 AM

我的数据库中有几行这样更新。现在,当我希望使用以下方法获取此日期时:

select * from my_records where end_dt > sysdate;

我得到一个异常:

  

ORA-01830:日期格式图片在转换整个输入之前结束   字符串。

是否有任何其他的方法来更新字符串作为时间戳或应该查询被修改?

更新: 我的表列的 END_DT 是在TIMESTAMP类型。

1 个答案:

答案 0 :(得分:1)

如果END_DT列的数据类型为DATE,则您的查询将起作用。看来,它不是,但VARCHAR2。如果是这样,则必须使用适当的格式掩码对其应用TO_DATE函数,以使其起作用。例如:

select * From my_records
where to_date(substr(end_dt, 1, 9), 'dd-mon-yy') > sysdate

30-DEC-18 12.00.00.000000000 AM
---------
this makes SUBSTR(end_dt, 1, 9), and its format mask is dd-mon-yy

[编辑]

您说过它的数据类型是时间戳。如果是,那么你的查询会工作。看这个例子:

SQL> create table test (end_dt timestamp);

Table created.

SQL> insert into test values (systimestamp);

1 row created.

SQL> select * From test where end_dt < sysdate;

END_DT
----------------------------------------------------
02.02.19 20:42:08,375000

SQL>

您能验证它确实是 时间戳吗(不是它看起来像它,而是真的)。通过运行DESC命令来做到这一点:

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------
 END_DT                                             TIMESTAMP(6)

SQL>