Diff. между датами – SQL plus

Возможный дубликат:
Функция DateDiff

Я пытаюсь найти разницу между датами в SQL. Разница в днях должна отображаться при выдаче запроса. Я получаю сообщение об ошибке, указывающее, что DATEDIFF является недопустимым идентификатором. Есть идеи?

Вот таблица: –

Create table auctions( item varchar2(50), datebought date, datesold date, days number ); Insert into auctions values ('Radio','12-MAY-2001','21-MAY-2001'); Select item,datebought,datesold,DATEDIFF(dd ,datebought,datesold )”days” from auctions; 

Название вопроса включает в себя «SQL plus», что подразумевает Oracle для меня.

У Oracle нет функции DATEDIFF. Самый простой способ определить количество дней между двумя датами с использованием Oracle – вычесть одну дату из другой.

 Select item, datebought, datesold, datesold-datebought as days from auctions; 

Oracle хранит информацию о дате и времени в поле даты. Обычная практика заключается в том, чтобы хранить даты, усеченные до полуночи, в поле даты в Oracle, если вас не волнует время.

Если ваши даты уже усечены до полуночи, то вычисленное значение будет целым числом.

Но если ваши сохраненные даты включают информацию о времени, тогда вы можете усечь значение, чтобы получить интегральное значение. Я подозреваю, что вы захотите урезать каждую дату до вычитания, чтобы, если вы купили в один день, то в следующий раз на следующий день будет считаться 1 день. Oracle усекает до полуночи.

 select item, datebought, datesold, trunc(datesold)-trunc(datebought) as days from auctions; 

Я согласен с WarrenT в том, что ваша таблица не должна иметь столбец денормализованных дней.

попробуйте это, его работа для меня

  Create table auctions( item varchar(50), datebought date, datesold date, days int ) Insert into auctions(item,datebought,datesold) values ('Radio','12-MAY-2001','21-MAY-2001') Select item,datebought,datesold,DATEDIFF(dd ,datebought,datesold )as days from auctions; 

В нормализованной структуре базы данных вы не хотите определять столбец таблицы, значение которого может быть рассчитано из одного или нескольких других столбцов. Вам будет лучше определять дни, проведенные в SELECT или в режиме просмотра.


Если вы используете DB2, вы можете рассчитать дни, проведенные как DAYS(DATESOLD) - DAYS(DATEBOUGHT)