Форматирование метки времени в oracle

#sql #oracle #format

#sql #Oracle #форматирование

Вопрос:

У нас есть столбец типа varchar2 (200 символов), который содержит метку времени в формате 2019-03-28:17:01:44.407000000 Теперь мы хотели бы обновить значения в столбце, чтобы формат выглядел как 28.03.2019 5:01:43.475 PM Мы используем Oracle 12c.

Я новичок в oracle, любая информация была бы полезна.

Ответ №1:

Это довольно ужасная модель данных. Временная метка действительно должна храниться в timestamp столбце, а не в varchar2 . И потому, что тогда тип данных определяет, что на самом деле находится в столбце, и потому, что это более эффективно, и потому, что это позволяет разумно использовать все функции метки времени Oracle для данных.

Предполагая, что вы застряли с неверной моделью данных

 update your_table
   set your_column = to_char( to_timestamp( your_column, 'YYYY-MM-DD:HH24:MI:SS.FF9' ),
                              'MM/DD/YYYY HH:MI:SS.FF3 PM' )
 

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

Если вам удастся успешно обновить все данные, имейте в виду, что любые запросы, которые это делают order by your_column , почти наверняка перестанут делать то, что вы хотите. Поскольку столбец является a varchar2 , а не a timestamp , сортировка выполняется в алфавитном порядке, а не по моменту времени, который представляет строка. Если вы измените формат на что-то, где временной порядок не соответствует алфавитному порядку, у вас, вероятно, будут недовольные пользователи.

Комментарии:

1. Большое спасибо, Джастин. Это сработало выберите column_name, to_char(to_timestamp(column_name, ‘ММ / ДД / ГГГГ ЧЧ: MI: SS.** FF3 ** PM’), ‘ГГГГ-ММ-ДД: ЧЧ24: MI: SS.** FF **’) из table_name Мы используем SAP Hybris иБД — это MSSQL, сейчас мы выполняем миграцию БД на Oracle. Некоторые таблицы не генерируются Hybris автоматически, поэтому мы перенесли их вручную. Hybris позаботился о формате для создаваемых таблиц. Теперь мы пытаемся отформатировать столбец в соответствии с Hybris.