0

可能重复:
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;
4

3 回答 3

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 的观点,即您的表格不应包含非规范化的天数列。

于 2012-11-20T06:15:15.663 回答
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;
于 2012-11-20T05:03:51.637 回答
1

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


如果您使用的是 DB2,您可以将持有的天数计算为DAYS(DATESOLD) - DAYS(DATEBOUGHT)

于 2012-11-20T05:31:09.843 回答