DIFF。日期之间 - SQL plus

时间:2012-11-20 03:52:23

标签: sql oracle

  

可能重复:
  DateDiff Function

我试图在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;

3 个答案:

答案 0 :(得分:2)

问题的标题包括“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的观点,即您的表格不应该包含非规范化的日期列。

答案 1 :(得分:1)

试试这个,它为我工作

  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;

答案 2 :(得分:1)

在规范化数据库设计中,您不希望定义一个表列,其值可以从一个或多个其他列计算得出。最好定义在SELECT或VIEW中保存的日期。


如果您使用的是DB2,则可以将日期计算为DAYS(DATESOLD) - DAYS(DATEBOUGHT)