2
DATA: l_str TYPE string,
    l_dat TYPE d.

l_dat = sy-datum.
l_str = l_dat.
WRITE:/ l_str.

l_dat = ( sy-datum + 1 ).
l_str = l_dat.
WRITE:/ l_str.
l_dat = sy-datum.

l_dat = ( l_dat + 1 ).
l_str = l_dat.
WRITE:/ l_str.

l_dat = sy-datum.
l_str = ( l_dat + 1 ).
WRITE:/ l_str.

出力結果 (具体的には最後の行):

  20130222
  20130223
  20130223
  734909

そして、常に期待値を取得するために、代わりにこれを行う最良の方法は何ですか?

4

2 に答える 2

2

左手(文字列)への代入により、代入が行われる前に加算の結果が整数に変換されると思われます。

編集申し訳ありませんが、他のテストでそれを行っていることに気付いたので、説明を残して例を削除しました。

Accessing Character-Like Date Fields and Time Fields Numericallyの ABAP キーワード ドキュメントから次のことを考慮してください。

文字のような日付フィールドおよび時間フィールドへの数値アクセスは、型 d および t を数値に変換すると、整数の日数または秒数が生成されるという事実を利用します。これは、数値計算で文字のような日付フィールドと時刻フィールドを使用する場合に特に当てはまり、これらのフィールドは対応する計算タイプに変換されます。

システムは暗黙的な型変換を行うため、加算に整数が含まれるため、代入の前に結果の型が整数に変換されることが想像できます。

他の例では、割り当ては加算の結果ではなく、明示的な変数です。

于 2013-02-22T11:11:37.400 に答える
2

日付を確実に加算/減算する 1 つの方法は、RP_CALC_DATE_IN_INTERVAL などの関数モジュールを使用することです。

SAP Wiki にコード例があります: http://wiki.sdn.sap.com/wiki/display/ABAP/add+or+subtract+dates,+months,years+to+date

それ以外の場合は、必ず日付型フィールドを変更し、必要に応じて計算が完了したら、データを文字列フィールドにコピーする必要があります。

あなたが示した行動が論理的ではないように見えることに同意する必要があります.私はそれを私たちのシステムで複製しましたが、同じ結果が得られました.

于 2013-02-22T09:27:17.160 に答える