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 プラス」が含まれており、これは私にとって Oracle を意味します。

Oracle には DATEDIFF 関数がありません。Oracle を使用して 2 つの日付の間の日数を決定する最も簡単な方法は、一方の日付から他方の日付を引くことです。

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

Oracle は、日付フィールドに日付と時刻の両方の情報を格納します。時間を気にしない場合は、日付を午前 0 時まで切り捨てて Oracle の日付フィールドに格納するのが一般的です。

日付が午前 0 時まで切り捨てられている場合、計算値は整数になります。

ただし、保存された日付に時間情報が含まれている場合は、値を切り捨てて整数値を取得することができます。ある日に購入した場合、翌日はいつでも 1 日としてカウントされるように、減算の前に各日付を切り捨てたいと思われます。Oracle は日付を午前 0 時まで切り捨てます。

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

正規化されたデータベース設計では、1 つ以上の他の列から値を計算できるテーブル列を定義したくないでしょう。SELECT または VIEW で保持される日を定義する方がよいでしょう。


DB2 を使用していた場合、保持された日数は次のように計算できます。DAYS(DATESOLD) - DAYS(DATEBOUGHT)

于 2012-11-20T05:31:09.843 に答える