ORA-01830: изображение в формате даты заканчивается перед преобразованием всей входной строки - JAVA / Oracle - PullRequest
0 голосов
/ 02 февраля 2019

Я преобразую строку ввода даты в формате 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: изображение в формате даты заканчивается перед преобразованием всего вводаstring.

Есть ли другой способ обновить строку как метку времени или запрос должен быть изменен?

UPDATE : столбец моей таблицы end_dt имеет тип TIMESTAMP.

1 Ответ

0 голосов
/ 02 февраля 2019

Если 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>

Можете ли вы убедиться, что он действительно является TIMESTAMP (не так, как это выглядит, но на самом деле так).Сделайте это с помощью команды DESC:

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

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...