Ответ 1
использование
select to_char(date_column,'YYYY-MM-DD') from table;
У меня есть столбец даты в таблице, хранящейся в формате MM/DD/YYYY
. Я должен выбрать и сохранить ту же дату в другой таблице в формате YYYY-MM-DD
, то есть формате даты XSD. Но я не в состоянии это сделать. Я использую этот запрос:
select to_date(date_column,'YYYY-MM-DD') from table;
Но я не могу этого сделать. Предоставление мне ошибки
ORA-01843: недействительный месяц
использование
select to_char(date_column,'YYYY-MM-DD') from table;
Похоже, у вас все получилось неправильно. Если ваши существующие данные находятся в формате 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.
(я все же предлагаю попытаться сохранить данные в своем "естественном" типе, но вместо того, чтобы хранить его как текст в первую очередь.)
Я предполагаю, что вы можете использовать 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';
Чтобы преобразовать столбец DATE
в другой формат, просто используйте TO_CHAR()
с нужным форматом, затем преобразуйте его обратно в тип DATE
:
SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD'))
from ORDERS;
Это может помочь, но в конце вы получите строку, а не дату. По всей видимости, Ваша проблема с форматом будет решена наверняка.
Это сработало для меня! Вы можете преобразовать в тип данных, который вы хотите использовать для даты или строки
to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date
Согласно комментариям, тип данных в datatable равен DATE. Поэтому вы должны просто использовать: "выберите date_column from table;"
Теперь, если вы выполните выбор, вы вернете тип данных даты, который должен быть тем, что вам нужно для .xsd.
Культурно-зависимое формирование даты должно выполняться в GUI (большинство языков имеют удобные способы сделать это), а не в select-statement.
В принципе, столбец 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)
Для форматирования военного времени,
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
Вы можете сделать это просто:
select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table
использование
SELECT STR_TO_DATE(date_column,'%Y-%m-%d') from table;
также gothrough
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
SELECT TO_DATE(TO_CHAR(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD')
FROM table;
если вам нужно изменить формат выходной даты вашего столбца, просто используйте to_char, чтобы получить строку, а не дату.