У меня есть столбец varchar2 open_time в таблице. Теперь мне нужно выяснить записи, где разница между open_time и sysdate больше 180.как принять разницу дат в oracle
ответ
Вы можете наложить varchar2 на дату, используя функцию TO_DATE
. Формат, который необходимо указать, зависит от формата, в котором хранится ваша дата.
Как только у вас есть значение даты, вы можете вычесть его из sysdate
, чтобы получить (дробное) количество дней. Таким образом, чтобы проверить, если ваш день более чем на 180 дней назад, вы могли бы написать:
WHERE sysdate - ThatDateValue > 180
другими словами:
WHERE sysdate - TO_DATE(open_time, 'FORMAT') > 180
где FORMAT формат, который соответствует вашей дате. Я не могу это дать, так как вы не указали какие-либо примерные даты, но параметр возможного формата хорошо документирован, если вы посмотрите TO_DATE
documentation.
Но в качестве предложения: Хранение дат в varchar2
- плохая идея. Для этого есть date
. Эффективнее не переводить текст в дату каждый раз, он предотвращает сохранение незаконных дат, и это упрощает проведение расчета даты. Я бы заменил столбец varchar2 столбцом даты, если у вас есть такая возможность.
Если вычесть две даты вы получите число, которое количество дней между двумя датами, так что вы можете вычесть open_time из SYSDATE, а затем сделать проверку, если результат больше 180
отл.
SELECT
--COLUMNS
FROM
--TABLES
WHERE
(SYSDATE - open_time) > 180
Пропущенный VarChar часть, а другой ответ упоминает функцию TO_DATE, которая легко исправить. просто бросьте TO_DATE вокруг open_time
Если open_time находится в днях, это кажется довольно простым.
SELECT * FROM myTable
WHERE open_time > 180
если его дата, попробуйте использовать lateiff?
Факс:его поле varchar –
Время работы в днях? – Dportology
Больше чем 180 что? Секунды? Минуты? Часы? Дни? Много лет? –
Время открытия - это дата, хранящаяся в поле varchar2. Необходимая разница дней –