2009-10-29 7 views
27

Oracle 11gでは、2つの日付の間に整数の日数を見つけようとしています。Oracle 11gで2日間の日数を取得するにはどうすればよいですか?

私は

select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual 

を行うことによって近づけることができますが、これは間隔を返し、私は整数にこれをキャストは成功していません。

編集:明らかに10gで、これは整数として日数を返します。

+3

ない日付を含むOracleで2つの日付の間の日数を、取得[間隔 – skaffman

+0

可能重複](http://stackoverflow.com/questions/20721413/get-the-number-of-days-between-two-dates-in-oracle-inclusive-of-the-dates) –

答えて

11

私はそれを自分で考え出しました。

select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual 
+5

奇妙な。他の回答者と同じように、私があなたの元の質問をするとき、私は間隔ではなく数字を得ます。解決策を試すと、エラーが発生します。ORA-30076:抽出ソースの抽出フィールドが無効です。これはOracle 10gにあります。どのバージョンを使用していますか? –

+0

11g。それがそれかもしれません。ありがとうございました。 –

+0

sysdateの代わりにsystimestampを使用すると、結果としてINTERVALを与える日付の算術ではなくタイムスタンプを実行することを意味します。しかし、私はsysdateであなたの経験を再現することはできません。 –

3

が必要これは私が自分自身をテストして動作します。
これは、列admitdateからSYSDATEとフェッチされた日付との差を与えるSQLは、数値を返す必要があることを

TABLE SCHEMA: 
    CREATE TABLE "ADMIN"."DUESTESTING" 
    ( 
    "TOTAL" NUMBER(*,0), 
"DUES" NUMBER(*,0), 
"ADMITDATE" TIMESTAMP (6), 
"DISCHARGEDATE" TIMESTAMP (6) 
    ) 

EXAMPLE: 
select TO_NUMBER(trunc(sysdate) - to_date(to_char(admitdate, 'yyyy-mm-dd'),'yyyy-mm-dd')) from admin.duestesting where total=300 
+0

trunc()が機能しませんでした。私はこのエラーを持っています:矛盾したデータ型:期待されたNUMBERは、二番目の –

+0

オハイオ州にインターバル日を持っています.HH24を持っていない原因:MI:SSの2番目の日の部分..嬉しいuはそれがurselfを考え出しました –

32

それとも、これを行っている可能性:

select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') from dual 

これは、全体の日数を返します:

SQL> create view v as 
    2 select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') diff 
    3 from dual; 

View created. 

SQL> select * from v; 

     DIFF 
---------- 
     29 

SQL> desc v 
Name     Null? Type 
---------------------- -------- ------------------------ 
DIFF       NUMBER(38) 
+0

これはまだインターデイ・トゥ・セカンド –

+0

いいえ、あなたはそれを何と言うのですか? –

+0

答えにNUMBERを返し、INTERVAL DAY TO SECONDは返さないという証明。 –

1

私はあなたが使用して試すことができ

select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual 
関連する問題