#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′.