Выпуск формата даты оракула

Мы используем Oracle 10.2.0.4.0 база данных, оракул форм и отчетов для создания форм и отчетов.

Теперь проблема в нашей производственной базе данных nls_date_format в формате dd-mon-rr. Когда разработчик создает форму в костюме разработчика, он дает формат dd-mm-rr на уровне формы, а когда данные хранятся в таблице, этот формат даты dd-mm-rr,

Теперь, когда разработчик запускает форму или отчет в конструкторе форм, он выдает dd-mm-rr format.but, когда та же самая форма или отчет запускается со стороны сервера приложений, он выдает ненужные символы в month.date, а год печатается так же, как формат даты. персонажи.

Надеюсь, что вы все хорошо ведете.

1 ответ

Есть два вопроса.

когда данные хранятся в таблице, этот формат даты является дд-мм-р-р.

Это совершенно неправильно. Oracle не хранит дату в том формате, который вы видите, для отображения. Oracle хранит DATE во внутреннем проприетарном формате в 7 bytes с каждым байтом, представляющим различные элементы ДАТЫ.

Byte    Description
----    -------------------------------------------------
1       Century value but before storing it add 100 to it
2       Year and 100 is added to it before storing
3       Month
4       Day of the month
5       Hours but add 1 before storing it
6       Minutes but add 1 before storing it
7       Seconds but add 1 before storing it

Не зависит от locale_specific NLS_DATE_FORMAT. Всегда используйте:

  • TO_CHAR для отображения даты в желаемом формате
  • TO_DATE для явного преобразования строки в дату.

Помните, что TO_DATE зависит от NLS.

Если у вас есть только элемент даты, и если вы не заботитесь об элементе времени, то лучше использовать литерал даты ANSI, который следует фиксированному формату 'YYYY-MM-DD',

отображение только месяца в барахлах

Это снова, потому что вы зависите от NLS_DATE_LANGUAGE. Как я уже сказал, вам следует избегать зависимости от настроек клиента для конкретной локали. Явно упомянуть NLS_DATE_LANGUAGE или используйте литерал ANSI Date, если вас не интересует элемент времени.

Например,

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL;

DT
---------
26-OCT-15

SQL> alter session set nls_date_language='french';

Session altered.

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL;

DT
-----------
26-OCT. -15

Итак, что случилось выше? для человека, использующего ФРАНЦУЗСКИЙ nls_date_language МЕСЯЦ показывает значение мусора. Давайте сделаем его NLS независимым, явно упомянув nls_date_language,

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR', 'nls_date_language=english') dt FROM DUAL;

DT
---------
26-OCT-15

Кроме того, значение NLS_LANG может быть неправильно установлено в переменной среды ОС. См. Почему на моем клиенте отображаются нежелательные значения / специальные символы / вопросительные знаки?

Другие вопросы по тегам