Подтвердить что ты не робот

Как изменить формат даты с MM/DD/YYYY на YYYY-MM-DD в PL/SQL?

У меня есть столбец даты в таблице, хранящейся в формате MM/DD/YYYY. Я должен выбрать и сохранить ту же дату в другой таблице в формате YYYY-MM-DD, то есть формате даты XSD. Но я не в состоянии это сделать. Я использую этот запрос:

select to_date(date_column,'YYYY-MM-DD') from table;

Но я не могу этого сделать. Предоставление мне ошибки

ORA-01843: недействительный месяц

4b9b3361

Ответ 1

использование

select to_char(date_column,'YYYY-MM-DD') from table;

Ответ 2

Похоже, у вас все получилось неправильно. Если ваши существующие данные находятся в формате MM/DD/YYYY, то вы хотите:

select to_date(date_column,'MM/DD/YYYY') from table;

чтобы преобразовать существующие данные в значения DATE. (Я действительно удивляюсь, почему они не хранятся как даты, если честно...)

Если вы хотите выполнить преобразование за один шаг, вам может потребоваться:

select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;

Другими словами, для каждой строки проанализируйте его в формате MM/DD/YYYY, затем переформатируйте его в формате YYYY-MM-DD.

(я все же предлагаю попытаться сохранить данные в своем "естественном" типе, но вместо того, чтобы хранить его как текст в первую очередь.)

Ответ 3

Я предполагаю, что вы можете использовать Oracle SQL Developer, который вы можете загрузить с здесь.

Вы можете определить формат даты, с которой хотите работать:

ALTER SESSION SET nls_date_format='yyyy-mm-dd';

Теперь вы можете выполнить такой запрос:

SELECT * FROM emp_company WHERE JDate = '2014-02-25'

Если вы хотите быть более конкретным, вы можете определить формат даты следующим образом:

ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';

Ответ 4

Чтобы преобразовать столбец DATE в другой формат, просто используйте TO_CHAR() с нужным форматом, затем преобразуйте его обратно в тип DATE:

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table

Ответ 5

select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

Это может помочь, но в конце вы получите строку, а не дату. По всей видимости,  Ваша проблема с форматом будет решена наверняка.

Ответ 6

Это сработало для меня! Вы можете преобразовать в тип данных, который вы хотите использовать для даты или строки

to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date

Ответ 7

Согласно комментариям, тип данных в datatable равен DATE. Поэтому вы должны просто использовать: "выберите date_column from table;"

Теперь, если вы выполните выбор, вы вернете тип данных даты, который должен быть тем, что вам нужно для .xsd.

Культурно-зависимое формирование даты должно выполняться в GUI (большинство языков имеют удобные способы сделать это), а не в select-statement.

Ответ 8

В принципе, столбец Data in a Date в Oracle может быть сохранен в любом пользовательском формате или сохранен по умолчанию. Все зависит от параметра NLS.

Текущий формат можно увидеть: SELECT SYSDATE FROM DUAL;

Если вы попытаетесь вставить запись и вставить инструкцию НЕ В ЭТОМ формате, то она даст: ORA-01843: неправильная ошибка месяца. Поэтому сначала измените формат даты базы данных перед вставными операторами (я предполагаю, что у вас есть объемная загрузка операторов insert), а затем выполните вставку script.

Формат можно изменить: ALTER SESSION SET nls_date_format = 'mm/dd/yyyy hh24: mi: ss';

Также вы можете изменить настройки NLS из GUI разработчика SQL (Инструменты > предпочтение > база данных > NLS)

Ссылка: http://oracle.ittoolbox.com/groups/technical-functional/oracle-sql-l/how-to-view-current-date-format-1992815

Ответ 9

Для форматирования военного времени,

select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL

--2018-07-10 15:07:15

Если вы хотите, чтобы ваша дата округлялась до Месяца, Дня, Часа, Минуты, вы можете попробовать

SELECT TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss') "full-date" --2018-07-11 10:40:26
, TO_CHAR( TRUNC(SYSDATE, 'year'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-year"-- 2018-01-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'month'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-month" -- 2018-07-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'day'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-Sunday" -- 2018-07-08 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'dd'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-day" -- 2018-07-11 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'hh'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-hour" -- 2018-07-11 10:00:00
, TO_CHAR( TRUNC(SYSDATE, 'mi'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-minute" -- 2018-07-11 10:40:00
from DUAL

Для литералов форматов вы можете найти помощь вhttps://docs.oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037

Ответ 10

Вы можете сделать это просто:

select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table

Ответ 12

SELECT TO_DATE(TO_CHAR(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD')
FROM table;

Ответ 13

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