2017-01-16 6 views
0

CASTでselect文を書き込もうとしていますが、浮動小数点値の挿入方法がわかりません。OpenSQLでfloat CASTを定義する方法

これは動作しません:

SELECT 
    field1, field2, 
    CAST(field3 AS FLTP) * CAST('0.03' AS FLTP) AS out2 
FROM table1 
INTO TABLE @DATA(lt_table1). 

は、私は、このエラーメッセージが出ます:CASTs to a numeric type are not allowed for '0.03' (the type is incorrect)をので、私は引用符で何がテキストであると想定されていると思います。

私はこの回避策を見つけた:

DATA: lv_discount TYPE f VALUE '0.03'. 

SELECT 
    field1, field2, 
    CAST(field3 AS FLTP) * CAST(@lv_flt AS FLTP) AS out1 
FROM table1 
INTO TABLE @DATA(lt_table1). 

私はこの回避策なしでそれをどのように行うことができますか?

+0

オープンSQL内のABAP式を使用することですそれよりも - なぜ最初のキャストですか? – vwegert

+0

@vwegert field3はCURR型ですが、キャストせずに掛けようとするとこのエラーメッセージが表示されます: ''算術式では基本算術型しか使用できません。 "' –

+0

私はそれを言い換えることができます - なぜあなたは最初にOpenSQLでこれをしたいのですか? 0.03は私にとって古典的な「マジックナンバー」のように見えますが、「割引」を決定するためにはBRF +のようなものを使用したいと思います。これらのことは常に変化し続けています... – vwegert

答えて

1

ABAP は、数値リテラルの小数点をサポートしていません。これらは、hereのように文字リテラルで指定する必要があります。
落とし穴は、そのsyntax helpが言うようにCASTオペレータが文字リテラルがサポートされていないということです:オペランドの

オペランド、列 COLデータベーステーブルまたはビュー プラスホスト変数の dobj の10進浮動小数点数を除くすべての数値型のリテラルはです。

可能性のある問題を回避するには、以下のことができます:

SELECT matnr, menge, 
    CAST(menge AS FLTP) * CAST(3 AS FLTP)/CAST(100 AS FLTP) AS out2 
FROM mseg 
INTO TABLE @DATA(lt_table1). 
0

しかし、より良い代替は私が一定ではなく、変数が、他を使用したい

SELECT 
     field1, field2, 
     CAST(field3 AS FLTP) * @(conv f('0.03')) AS out1 
    FROM table1 
    INTO TABLE @DATA(lt_table1). 
関連する問題