Исправлена ​​проблема с датой в файле .csv с помощью utl_file - PullRequest
0 голосов
/ 28 мая 2019

Я использую utl_file для записи в csv файл.Данные включают в себя также столбцы даты.Здесь возникает проблема

. Для одной цифры день 0 удаляется, когда данные вставляются в файл csv.Например, дата 07-Jun-13 вставляется как 7-Jun-13, как я могу гарантировать, что 0 остается?

Я уже to_char и concat "", но все же я получаю только однозначную дату,Сгенерированный файл csv используется сторонней системой, поэтому в csv.

я не могу вносить изменения. Я использую EBS 12.1.3.

Спасибо

Фрагмент кода PL / SQL

   concat(concat('"',lv_proj_start_date),'"')    ||','||
   concat(concat('"',lv_proj_start_date_plus_1),'"')     ||','||

Я ожидаю, что выходные данные для даты в формате CSV будут выглядеть как 07-Jun-13

, но в файле CSV значение o / p равно 7-Jun-13.

1 Ответ

0 голосов
/ 28 мая 2019

Предполагая, что оба столбца имеют формат DATE, вам необходимо явно преобразовать дату в любой формат, который вы пожелаете, например:

'"' || to_char(lv_proj_start_date, 'dd-Mon-yy', 'nls_date_language=english') || '","' 
    || to_char(lv_proj_start_date_plus_1, 'dd-Mon-yy', 'nls_date_language=english') || '",'

NB. Я также преобразовал ваши вызовы функций CONCAT, чтобы использовать объединениеоператор ||, так как это гораздо легче читать.Я также комбинировал текстовые строки, где это было возможно.

Я также использовал необязательный третий параметр to_char(), чтобы явно установить язык даты как английский, что делает его независимым от NLS.

Последнее замечание: вам обязательно нужно выводить даты с двузначными годами?В настоящее время предпочтительны 4 цифры, после Y2K!


ETA: Вот пример, показывающий, что вывод правильный:

DECLARE
  lv_proj_start_date DATE := to_date('07/07/2019', 'dd/mm/yyyy');
  lv_proj_start_date_plus_1 DATE := lv_proj_start_date + 1;

  v_str VARCHAR2(4000);
BEGIN
  v_str := '"Testing","' || to_char(lv_proj_start_date, 'dd-Mon-yy', 'nls_date_language=english') || '","' 
                          || to_char(lv_proj_start_date_plus_1, 'dd-Mon-yy', 'nls_date_language=english') || '"';

  dbms_output.put_line(v_str);
END;
/

"Testing","07-Jul-19","08-Jul-19"
...