我转换我的日期输入字符串中的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
类型。
答案 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>