Использование Toad для Oracle.
Моя исходная таблица содержит даты в формате следующего 2020-07-01T00:00:00
. Я использую следующий код для удаления всего, начиная с T
с каждой даты:
SELECT NVL(SUBSTR(date_column_0, 0, INSTR(date_column_0, 'T')-1), date_column_0) as date_column_0 FROM original_table;
Эти даты у меня есть в другой тестовой таблице, где тип date_column VARCHAR:
date_column
2020-07-01
2020-08-01
2020-09-01
Мне нужно преобразовать эти даты в формат ГГГГМ (т. Е. 202007). До сих пор я пробовал
1)
select to_char(cast(date_column as date, 'YYYYMM')) from test_table;
select to_char(to_date(date_column, 'YYYYMM')) from test_table
Обе эти ошибки приводят к ошибке ORA-01843 - not a valid month
.
2)
select to_char(cast(column_6 as date), 'YYYYMM') from test_table;
select to_char(cast(column_6 as date), 'YYYY/MM/DD') from test_table;
Оба выдают ошибку ORA-01861: literal does not match format string
.
По какой-то причине
select to_char(cast(date_column as date, 'YYYY/MM/DD')) from test_table;
select to_char(to_date(date_column, 'YYYY/MM/DD')) from test_table
оба работают и показывают даты в формате 01-JUL-20
, что я явно не хочу. Если я выберу аналогичный формат даты из двойного, он также отлично работает (код ниже дает `202004``):
select to_char(cast(sysdate as date),'YYYYMM') from dual;
---> 202004
РЕДАКТИРОВАТЬ 23.4.2020 Я думаю, что я понял это, хотя должен был понял это намного раньше ... Я должен сначала выбрать SUBSTRING из VARCHAR "date", чтобы он соответствовал формату даты, в который я хочу преобразовать его. Итак,
SELECT ((SUBSTR(date_column, 9, 2) || SUBSTR(date_column, 6,2) || SUBSTR(date_column, 1,4))) FROM test_table;
- команда SUBSTRING для выбора даты в формате DDMMYYYY. И следующая команда
SELECT to_char(cast(SUBSTR(date_column, 9, 2) || SUBSTR(date_column, 6,2) || SUBSTR(date_column, 1,4) as date, 'DD-MM-YYYY')) FROM test_table;
- это команда для ее преобразования в дату.