#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;