Форматы даты отображаются по-разному в Oracle - PullRequest
0 голосов
/ 05 сентября 2018

Я экспортирую данные отчетов из БД в Excel. У меня есть 2 схемы DB (Local & QA) и те же запросы для отчетов. Здесь я сталкиваюсь с проблемой форматов даты. мы используем Oracle 12c .

Формат даты должен быть ' DD-MON-YY ', как ' 01-AUG-18 ' При экспорте данных в Excel,
из локальной базы данных она экспортирует дату как ' 12-09-18 '.
из QA db это дата экспорта как ' 12-AUG-18 '.
Запрос:

select trim(to_date('01-01-1970 00','DD-MM-YYYY hh24') + (createdtime)/1000/60/60/24) 
  from TBL_RESPONSESUMMARY;

Может ли кто-нибудь направить меня, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Используйте TO_CHAR, чтобы явно указать модель формата, которую вы хотите использовать для вывода даты:

SELECT TO_CHAR(DATE '1970-01-01' + createdtime/1000/60/60/24, 'DD-MON-YYYY')
FROM   TBL_RESPONSESUMMARY;

Что делает ваш запрос:

  1. to_date('01-01-1970 00','DD-MM-YYYY hh24') генерирует значение вашей эпохи как тип данных DATE;
  2. + (createdtime)/1000/60/60/24 добавляет к нему значение смещения в миллисекундах (и тип данных останется DATE);
  3. trim( string_value ) принимает строковое значение и удаляет начальные и конечные пробелы; однако, ваше входное значение - DATE, а не строка, поэтому Oracle должен выполнить неявное приведение, используя TO_CHAR, и он использует параметр сеанса NLS_DATE_FORMAT. В вашей локальной базе данных это, вероятно, DD-MM-RR, но в базе данных QA это DD-MON-RR, поэтому вы получаете разные значения.

Вы можете изменить NLS_DATE_FORMAT так, чтобы он был согласованным в обеих базах данных - однако лучше использовать явный вызов TO_CHAR, чтобы не полагаться на переменные сеанса и неявное приведение.

0 голосов
/ 05 сентября 2018

У вас разный формат даты между двумя базами данных. Запустите эту команду в локальной базе данных, чтобы изменить формат даты

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';
...