2

こんにちは私は、日を含まない当月からの日付の正しい違いを取得することに問題がありました。

つまり、クエリが実行される月が2013年3月の場合

その後、次の結果になるはずです

EXECUTION_DATE、EXEC_DIFF
2013年2月1日、1
2013年1月31日、2
2013年1月30日、2

ただし、以下のSQLステートメントを使用して

EXECUTION_DATE、EXEC_DIFF
2013年2月1日、1
2013年1月31日、2
2013年1月30日、1
select EXECUTION_DATE,
       floor(MONTHS_BETWEEN (trunc(sysdate,'MM')-1, EXECUTION_DATE))+1 "EXEC_DIFF"
from V_CERT_LIST  
WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
ORDER BY EXECUTION_DATE DESC

誰かが私を正しく置くことができますか?

ありがとう

4

3 に答える 3

4
select EXECUTION_DATE,
       MONTHS_BETWEEN (trunc(sysdate,'MM'), trunc(EXECUTION_DATE,'MM')) "EXEC_DIFF"
from V_CERT_LIST  
WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
ORDER BY EXECUTION_DATE DESC
于 2013-03-22T14:17:29.453 に答える
1

スコアを探していませんが、months_betweenの何が問題なのか理解できませんか?私の理解では、月の実行がいつ行われるかは問題ではありません-1月31日または1月30日...あなたの例のように、1月と3月の違いはまだ2か月です。クエリに月の日数を追加できますが、mo_betwです。まだ同じです...:

SELECT to_char(exec_date, 'DD-MON-YYYY') exec_date, MONTHS_BETWEEN(run_date, exec_date) months_btwn
 FROM
 (
 SELECT to_date('01/03/2013', 'DD/MM/YYYY') run_date
     , Add_Months(Trunc(sysdate,'YEAR'),Level-1) exec_date -- first day of each month
   FROM dual
 CONNECT BY LEVEL <= 3
 )
/


EXEC_DATE   MONTHS_BTWN
------------------------
 01-JAN-2013    2
 01-FEB-2013    1
 01-MAR-2013    0
于 2013-03-22T14:29:23.633 に答える
0

Months_Between月の日を考慮に入れた複雑なロジックがあります。

おそらくあなたが欲しいのはこれです:

select EXECUTION_DATE,
       ((year(sysdate)*12+month(sysdate)) - (year(execution_date)*12 + month(execution_date))
       ) as Exec_Diff
from V_CERT_LIST  
WHERE EXECUTION_DATE < TO_DATE('02/02/2013','DD/MM/YYYY') 
ORDER BY EXECUTION_DATE DESC

これにより、年/月の組み合わせが0時からの月数に変換され、結果が差し引かれます。

于 2013-03-22T14:16:02.383 に答える