2013-10-30 12 views
9

のために私は私のためにDB2にGETDATE()に同様の方法を取得するには今しばらくの間しようとしています。これまでのところ私は、次を発見した:へGETDATE()メソッドは、DB2

current date 
current timestamp 
current time 

それは私のために可能でしょう:

select specific, columns 
from table 
where datefield = current date - 1 day 

は、これが最も効率的な方法ですか私はおそらくまだ見つかっていないいくつかの方法がありますか?これは私がそれをクエリが実行される毎日を編集する必要がありますよう有用ではないが

WHERE datefield = - days(date('2013-10-28')) 

EDIT:

は、私は現在、これを持っています。

は今、このようになってきている:

WHERE datefield = VARCHAR_FORMAT(CURRENT TIMESTAMP, 'YYYYMMDD') - 1 

これは1として、月の最初の日には動作しません除いて - 1 = 0と月には0日目がありません...

+0

あなたは正確に達成するために何をしたいですか?あなたの質問は何ですか ?あなたは今日の1日前を望んでいますか?ここ – user2919277

+0

はあなたを助けるかもしれない少しの記事です:http://www.ibm.com/developerworks/data/library/techarticle/0211yip/0211yip3.html – steoleary

+1

はこれが得られます(DD、-1、GETDATE())をDATEADDを選択しますあなたは現在の1日前の日です。これがあなたの質問に答えるなら... – user2919277

答えて

19

これはあなたに昨日の日付を与える:

SELECT CURRENT DATE - 1 DAY FROM sysibm.sysdummy1 
-3
select dateadd(dd,-1,getdate()) 
+0

これは、DB2 for i、V6R1では機能しません。 –

+0

標準SQLにDATEADD()はありません。これはMicrosoftの拡張機能です。 MySQLにはDate_Add()もあります。 GETDATE()と同様です。 – user2338816

3

あなたは、代替として、特定の日付範囲を知りたい場合は、試すことができますTIMESTAMPDIFFスカラー関数、構文図の読み取りスキーマ図式図スキーマビジュアル構文図 パラメータ:16は日単位で評価することを示します

次の例では現在70日の範囲を決定しています。

WHERE (TIMESTAMPDIFF(16, CHAR(SYSDATE- CURRENT DATE)))<70 AND (TIMESTAMPDIFF(16, CHAR(SYSDATE- CURRENT DATE))) > -1 

あなたは、DB2によってサポートされている。この方法に関するすべての詳細については、このリンクで見てみることができます。http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000861.html?cp=SSEPGG_9.7.0%2F2-10-3-2-155

+1

参照はDB2 LUW用です。 IBM i用DB2リファレンスは、http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzscatimedifstmp.htmにあります。 –