В столбце Oracle DATE
нет формата; строковое представление, которое вы видите, когда вы, скажем, select max(create_dt)) from profile_details
в SQL * Plus используете неявную маску формата из ваших настроек NLS, которая в этом клиенте выглядит как DD-MON-RR
.
Ваш JDBC-вызов применяет явную маску формата, что является правильным решением , если вы хотите, чтобы Java воспринимала его как String , не в последнюю очередь потому, что он может иметь различные настройки NLS. Но ваша маска не соответствует тому, что вы говорите, что хотите; вы указываете DD-MM-YYYY
, когда хотите DD-MON-RR
.
Но похоже, что вы, вероятно, получаете значение из вызова JDBC с помощью вызова getDate()
, и оно неявно приводится к типу объекта Java Date. Если вы хотите трактовать его как дату в Java, вам не нужно to_char
в вашем выборе, и вам нужно использовать инструменты Java (например, SimpleDateFormat
, как предлагает @Andrew Logvinov), чтобы превратить его в строку по мере необходимости. Если вы когда-либо рассматривали его как строку - скажем, для немедленного отображения, - вместо этого используйте getString()
и исправьте маску формата даты в запросе.
Редактировать
Если вы извлекаете значение из JDBC с помощью getDate()
и хотите видеть значение в виде строки в указанном вами формате, вам нужно сделать что-то вроде:
Date raw_date;
String string_date;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy");
raw_date = <resultSet>.getDate(1);
string_date = sdf.format(raw_date);