Выберите последние данные за 13 месяцев

#sql #oracle #datetime

Вопрос:

Я хотел бы выбрать данные за последние 13 месяцев из базы данных oracle. ДАТА отображается как ’16/04/2020, 00:00:00′. Я попробовал следующее, однако он игнорирует оператор where и возвращает все данные:

 select *
from DM.DATE COMMON_DATE
where
to_date(COMMON_DATE.DATE,'dd/mm/yyyy') <= add_months(trunc(sysdate, 'MON'), -1)
 

Спасибо

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

1. Каков тип данных столбца?

2. Тип data_type указывает свою ДАТУ и длину данных 7, хотя я вижу это как ’16/04/2020, 00:00:00′. Есть еще какие-нибудь мысли?

Ответ №1:

Ваш тип данных даты выглядит как строка из-за запятой. Я предлагаю вам приложить все усилия для исправления этих данных! Даты должны храниться с использованием date timestamp или связанных типов.

В вашем случае, однако, вы можете проанализировать дату. Я предполагаю, что вы хотите:

 where to_date(substr(common_date.date, 1, 10), 'DD/MM/YYYY') >= add_months(trunc(sysdate, 'MON'), -13)
 

Редактировать:

Если столбец уже является a date , то вам не нужно его преобразовывать:

 where common_date.date >= add_months(trunc(sysdate, 'MON'), -13)
 

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

1. Спасибо за это, я попробовал, но получил это сообщение об ошибке » ORA-01858: нечисловой символ был найден там, где ожидалось числовое значение

2. @Sa . . . Как я уже сказал, не храните даты в виде строк! Вам нужно будет исправить данные. Или объясните, что делать, если дата не распознана.

3. Тип data_type указывает свою ДАТУ и длину данных 7, хотя я вижу это как ’16/04/2020, 00:00:00′.