Преобразование даты в SQL (Oracle)

#sql #oracle #date #transformation

#sql #Oracle #Дата #преобразование

Вопрос:

У меня есть таблица с полем даты, в DDL дата ЗАКАЗА задается как дата.

В таблице дата выглядит следующим образом:

Дата заказа
2020-02-11 00:00:00
2021-01-19 00:00:00
2020-10-27 00:00:00
2020-01-09 00:00:00

Я хотел бы преобразовать в ММ / ДД / ГГГГ, в идеале запустить обновление таблицы, если это возможно?

Я уже пробовал:

 SELECT to_date(to_char(trunc(OrderDate), 'DD/MM/YYYY'))
FROM ORDER_TABLE;
 

но получите сообщение об ошибке «Ошибка SQL [1843] [22008]: ORA-01843: недопустимый месяц»

Помощь очень ценится, и я с нетерпением жду ваших ответов и изучения ошибки!

Большое спасибо, AJ

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

1. У «даты» в Oracle всегда есть компонент времени. Но ваш вопрос даже не об этом, а о том, как отображать даты. Чтобы изменить способ отображения ваших дат, измените параметр, который управляет этим: alter session set nls_date_format = 'mm/dd/yyyy' обратите внимание, что некоторые интерфейсные программы хранят ваши настройки отдельно, поэтому вам придется найти это в своем программном обеспечении и внести изменения там. Но во всех случаях речь идет об управлении отображением дат, а не об изменении данных в таблице.

2. DATE значения не имеют формата. Итак, вы не можете изменить его для начала

3. Чтобы еще больше прояснить различие (между «датой» и «строковым представлением даты для целей отображения»), представьте, что ваша дата в настоящее время отображается как 28 ЯНВАРЯ 2021 года, и вы предпочитаете показывать 28.01.2011. Это одна и та же дата , поэтому они хранятся идентично в базе данных (в типе данных date ); отличается только отображение, и это не контролируется сохраненными данными, оно контролируется параметрами «преобразование в строку». Если вы хотите полный контроль, вместо select orderdate этого вы можете написать select to_char(orderdate, 'mm/dd/yyyy') , и тогда вы не будете зависеть от каких-либо значений по умолчанию.

Ответ №1:

У вас уже есть ДАТА ЗАКАЗА, сохраненная как ДАТА в базе данных, поэтому единственное, что вам нужно, это преобразовать ее обратно в символьную строку, когда вы сообщаете об этом (если вы хотите, чтобы она была красиво оформлена)

 SELECT TO_CHAR(OrderDate, 'DD/MM/YYYY') FROM ORDER_TABLE;