Файл содержит значения даты как «01.09.2015 14:30:00». Но после импорта в таблицу oracle все значения даты отображаются как «20-01-19 15:12:15.00000 PM»

  • У меня есть CSV-файл, содержащий даты 2015–2022 годов и время в формате даты с 5-минутным интервалом: 09-01-2015 09:15:00+05:30.
  • Мне нужно изменить формат даты с 01.09.2015 09:15:00+05:30 на 01.09.2015 09:15:00.
  • Поэтому я скопировал и вставил данные в блокнот++, удалил все +05:30 из всех строк и заменил их в CSV-файле.
  • Формат стал ДД-ММ-ГГГГ ЧЧ: МИ: СС (01-09-2015 09:15:00), а затем импортировал файл csv в таблицу oracle. На момент импорта формат даты отображается как ДД-ММ-ГГГГ ЧЧ: МИ: СС как в файле Excel, так и в разработчике sql.
  • Но после импорта данных в таблицу значения столбцов выглядят так: «20-01-19 15:12:15.000000000 PM 15:11:05.000». Я не понимаю, как разработчик sql принял формат даты как.

Пытался найти проблему с помощью следующих запросов:

  1. Пытался проверить только значения года. Но сами значения года в таблице неверны.
select to_char(datetime,'YYYY') from table;
0031

Я попробовал использовать для столбца типы данных даты и времени.

Я не понимаю, что реальная проблема связана с CSV-файлом или разработчиком SQL. Может кто-нибудь помочь мне, пожалуйста.

  1. исходные данные файла CSV
дата и время 09-01-2015 14:30:00+05:3009-01-2015 14:35:00+05:3009-01-2015 14:40:00+05:3009-01-2015 14:45:00+05:30
  1. Удален +05:30 путем замены всех в блокноте ++, а затем импортирован в столбец таблицы с типом данных TIMESTAMP. В таблице значения Datetime отображаются как:
дата и время 20-01-09 3:14:30.000000000 PM20-01-15 3:14:55.000000000 PM20-01-15 3:15:00.000000000 PM20-01-15 3:15:05.000000000 PM

3.

SELECT * FROM NLS_SESSION_PARAMETERS WHERE parameter LIKE 'NLS_%_FORMAT';
ПАРАМЕТР ЦЕНИТЬ NLS_DATE_FORMAT ДД-ММ-РР NLS_TIME_FORMAT HH12:MI: SSXFF AM NLS_TIMESTAMP_FORMAT ДД-ММ-РР fmHH12: fmMI:SSXFF AM NLS_TIME_TZ_FORMAT HH12:MI: SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT ДД-ММ-РР fmHH12: fmMI:SSXFF AM TZR

4. Импортировано с помощью мастера импорта данных введите здесь описание изображения

Решение:

Как решение @MTO https://stackoverflow.com/a/78663198/21575280
Я дал FXDD-MM-YYYY HH24:MI в мастере во время импорта, и это сработало.

Как вы импортировали данные, какие у вас были настройки NLS в клиенте при импорте и какой тип данных представляет собой столбец, в который вы импортировали?

Alex Poole 23.06.2024 19:39

Как вы импортировали файл?

Wernfried Domscheit 23.06.2024 19:42

Я пробовал использовать оба типа данных: дату и время. Импортируйте данные в SQL-разработчик с помощью Таблицы>mytable(Indices)>импортируйте данные, затем выберите мой файл CSV.

Wick 23.06.2024 20:07

Пожалуйста, отредактируйте вопрос и включите минимальный воспроизводимый пример с: (минимальным) примером CSV-файла, который вы пытаетесь импортировать и в котором возникла эта проблема; подробности процесса, который вы использовали в SQL Developer для импорта файла (особенно то, что вы установили в качестве разделителей столбцов и строк); каков результат SELECT * FROM NLS_SESSION_PARAMETERS WHERE parameter LIKE 'NLS_%_FORMAT'; и каков ожидаемый результат для этих образцов данных?

MT0 23.06.2024 21:10

Пожалуйста, отредактируйте вопрос, чтобы точно описать, как вы импортировали. В частности, какой «Формат» был выбран на этапе «Определение столбца» мастера импорта.

Alex Poole 23.06.2024 21:10

@MT0 Я отредактировал вопрос. Желаемый формат вывода: 01.09.2015 14:30(ДД-ММ-ГГГГ ЧЧ:МИ:СС).

Wick 24.06.2024 16:36

«Желаемый выходной формат» не связан с исправлением повреждений, которые вы вызываете при импорте в неправильном формате; исправьте это, как показал MT0 (формат FXDD... работает в мастере импорта), тогда вы сможете форматировать результат запроса данных так, как хотите, изменяя NLS_TIMESTAMP_FORMAT или используя to_char() в любом нужном вам формате.

Alex Poole 24.06.2024 17:32

@AlexPoole Привет, я дал FXDD-MM-YYYY HH24:MI в мастере во время импорта, это сработало. Благодарю за ваш ответ.

Wick 24.06.2024 19:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
8
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На вашем изображении видно, что данные имеют формат:

09-01-2015 14:30
09-01-2015 14:35
09-01-2015 14:40
09-01-2015 14:45

а формат целевой таблицы — YYYY-MM-DD HH24:MI:SS.

Формат не соответствует данным!


Вы можете увидеть, что происходит в SQL-запросе:

SELECT TO_CHAR(
         TO_DATE(
           '09-01-2015 14:40',
           'YYYY-MM-DD HH24:MI:SS'
         ),
         'YYYY-MM-DD HH24:MI:SS'
       ) AS dt
FROM   DUAL;

Тогда результат будет 0009-01-20 15:14:40 и:

  • день помещен в компонент года;
  • столетие перенесено в компонент дня;
  • год столетия находится в часовом компоненте;
  • час находится в компоненте минут;
  • минута находится в компоненте секунд.

(Все неверно, кроме месяца!)


Чтобы решить эту проблему, попробуйте установить целевой формат FXDD-MM-YYYY HH24:MI. FX сообщает ему использовать именно этот формат, включая пробелы, дефисы и двоеточия, которые без FX будут считаться необязательными частями модели формата (вы можете опустить FX и просто использовать DD-MM-YYYY HH24:MI, но, как и ваш текущий формат, он, скорее всего, будет разрешающим). принимать значения, которые не имеют точного формата и которые могут вызвать проблемы, и, вероятно, лучше немедленно потерпеть неудачу с сообщением об ошибке, чем обнаружить, что у вас есть данные, которые выглядели нормально, но на самом деле недействительны).

рабочий пример

@MTO Я дал FXDD-MM-YYYY HH24:MI во время импорта в мастере данных. Это сработало отлично. Большое спасибо за ваш ответ. Если вы проголосуете против вопроса, пожалуйста, проголосуйте за него.

Wick 24.06.2024 19:18

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