2012-02-21 6 views
0

以下のクエリはOracleではintervalの下で数式を使用していますか?

は右括弧

が不足して動作しませんが、あなたは私が得るために必要なものを知っているので、私はそれが仕事を得ることができますか? どうすればいいですか?

SELECT sysdate, 
     (sysdate + interval (to_char(sysdate, 'YYYY') - 2011) YEAR) as tt 
FROM dual; 
私は、このソリューション

SELECT sysdate, 
     add_months(sysdate,12*(to_char(sysdate, 'YYYY') - 2011)) 
FROM dual; 

それが正しいアプローチであると考えていた

おかげ

+3

「動作しない」とはどういう意味ですか?エラーメッセージはありますか?狂犬病のウルヴァリンはあなたのモニターから這い出し、あなたがそれを動こうとするときはいつもあなたの顔を罵倒していますか? **より具体的に言えば、** –

+2

@ Data-Base - 私はOracle SQL開発者であり、達成しようとしていることはわかりません。 2012年にクエリが実行される場合はSYSDATEに1年、2013年にクエリが実行される場合は2年を追加するという目標はありますか? –

+0

あなたはそれを正しく得ました、はい!よく私はmysqlからOracleへのビューの移行に取り組んでいますので、私はこれらの奇妙な問題に終わっています:-) –

答えて

4

これはあなたが探しているものにあなたを取得する必要があります。何年間隔がないので

SELECT 
    sysdate, 
    (sysdate + TO_YMINTERVAL((to_char(sysdate, 'YYYY') - 2011)||'-0')) as tt 
FROM dual; 

ノートの「-0」添付が必要であり、それは何年持ち、 (「-0」は0ヶ月を示す)。

また、2月29日は来年には存在しないため、閏年に問題が発生することにも注意してください。

私は数ヶ月にあなたの年換算(12掛ける)とADD_MONTHSを使用することによって、この問題を解決するだろう:

SELECT 
    sysdate, 
    add_months(sysdate, (to_char(sysdate, 'YYYY') - 2011)*12) as tt 
FROM dual; 

うるう日にTTのために2013年2月28日を返しますどの。

+0

私の質問を更新しました:-) –

+0

@ Data-Base - 新しいソリューションよく見える – Craig

+0

あなたのソリューションは私のニーズに合っています:-)助けてくれてありがとう –

関連する問題