2015-06-23 4 views
-4

У меня есть столбец varchar2 open_time в таблице. Теперь мне нужно выяснить записи, где разница между open_time и sysdate больше 180.как принять разницу дат в oracle

+0

Время работы в днях? – Dportology

+0

Больше чем 180 что? Секунды? Минуты? Часы? Дни? Много лет? –

+0

Время открытия - это дата, хранящаяся в поле varchar2. Необходимая разница дней –

ответ

3

Вы можете наложить varchar2 на дату, используя функцию TO_DATE. Формат, который необходимо указать, зависит от формата, в котором хранится ваша дата.

Как только у вас есть значение даты, вы можете вычесть его из sysdate, чтобы получить (дробное) количество дней. Таким образом, чтобы проверить, если ваш день более чем на 180 дней назад, вы могли бы написать:

WHERE sysdate - ThatDateValue > 180 

другими словами:

WHERE sysdate - TO_DATE(open_time, 'FORMAT') > 180 

где FORMAT формат, который соответствует вашей дате. Я не могу это дать, так как вы не указали какие-либо примерные даты, но параметр возможного формата хорошо документирован, если вы посмотрите TO_DATE documentation.

Но в качестве предложения: Хранение дат в varchar2 - плохая идея. Для этого есть date. Эффективнее не переводить текст в дату каждый раз, он предотвращает сохранение незаконных дат, и это упрощает проведение расчета даты. Я бы заменил столбец varchar2 столбцом даты, если у вас есть такая возможность.

0

Если вычесть две даты вы получите число, которое количество дней между двумя датами, так что вы можете вычесть open_time из SYSDATE, а затем сделать проверку, если результат больше 180

отл.

SELECT 
--COLUMNS 
FROM 
--TABLES 
WHERE 
(SYSDATE - open_time) > 180 

Пропущенный VarChar часть, а другой ответ упоминает функцию TO_DATE, которая легко исправить. просто бросьте TO_DATE вокруг open_time

0

Если open_time находится в днях, это кажется довольно простым.

SELECT * FROM myTable 
WHERE open_time > 180 

если его дата, попробуйте использовать lateiff?

Факс:
+0

его поле varchar –