2016-07-27 22 views
-1

私は、次の式SQL TO_CHAR TO_NUMBER TO_DATE

WHERE TO_CHAR(TO_DATE(dab.SNAPSHOT_DAY,'YYYYMMDD'),'MM') >= 
     TO_CHAR(TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),'MM') -1 

'{RUN_DATE_YYYYMMDD}' returns the date of when the data was captured. 

を持って、私は次のエラーを取得:

ORA-01481:invalid number format model

列は、データ型の面でコヒーレントです。 dab.SNAPSHOT_DAY{DATE} 2016-07-24 00:00:00.0

何が起こっている可能性がありますか?

私がやっていることは、現在と過去1か月の結果を得ることです。それは私がMONTHに両方の日付を変換したい理由(MM)で、その後、例えば1をsubstract:

Snapshot_day = 05/JUN/2016 --> 06 
RUN_DATE = 27/JUL/2016 --> 07 
Comparing them: 06 >= 07 - 1 TRUE 

あなたのすべてに感謝します! {RUN_DATE_YYYYMMDD}が実際にある場合

where snapshot_day >= add_months(to_date('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),-1) 

そして:

+2

「SNAPSHOT_DAY」列の日付の種類は何ですか? –

+0

'snapshot_day'が既に' date'カラムである場合、 'TO_DATE(dab.SNAPSHOT_DAY、 'YYYYMMDD')'は全く無意味です。 –

+0

これを修正しようとするのではなく、インプットが何であるか、そして望みの結果が何であるかを簡単に英語で言うほうがよいかもしれません。どのような場合でも、文字列に変換した後の日付を比較するのは間違っています。文字列から1を引く方法を明確にしていません。 – mathguy

答えて

0

あなたは

where trunc(dab.SNAPSHOT_DAY,'MM') >= 
    trunc(to_date('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),'MM') -1 

をしたい日付の特定の部分を取得するためにtruncを使用することができますしかし、私はよりよい解決策は、になると思いますパラメータの日付の種類:

where snapshot_day >= add_months(run_date),-1) 
+0

を開いてください。それでもORA-01481は投げられません。 MM文字列は暗黙的に数値に変換されます。とにかく、あなたの解決策はとにかく近いと思われます。年のない月の数字だけを比較すると、おそらく正しいとは限りません。 -1はtruncの前にある必要があるかもしれませんが、実際に何が必要なのかは不明です。 –

+0

私は問題をより明確にするための上記の情報を提供しました あなたのサポートと教育に感謝します! – alexparq

+0

@alexparq - 今すぐチェックできますか? –

関連する問題