2017-01-16 4 views
0

Ich versuche, eine Select-Anweisung mit CAST schreiben, aber ich weiß nicht, wie Sie den Float-Wert einfügen.So definieren Sie Float CAST in OpenSQL

funktioniert das nicht:

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

Ich bekomme diese Fehlermeldung: CASTs to a numeric type are not allowed for '0.03' (the type is incorrect), also denke ich, alles in Anführungszeichen Text angenommen werden.

fand ich diese Abhilfe:

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). 

Wie kann ich es ohne diese Abhilfe?

+0

ich eine Konstante verwenden würde zu verwenden, anstatt eine Variable, aber auch andere als das - warum die Besetzung an erster Stelle? – vwegert

+0

@vwegert Feld3 ist Typ CURR, wenn ich versuche, es ohne Casting zu multiplizieren, bekomme ich diese Fehlermeldung: '" Nur elementare arithmetische Typen können in arithmetischen Ausdrücken verwendet werden. Die Typauswahlliste. Der Typ von '0.03' ist ungültig. "' –

+0

Lassen Sie mich das umformulieren - Warum möchten Sie das in OpenSQL überhaupt machen? 0.03 sieht für mich wie die klassische "magische Zahl" aus, und um einen "Rabatt" zu bestimmen, würde ich etwas wie BRF + verwenden, denn, weißt du - diese Dinge ändern sich ständig ... – vwegert

Antwort

1

ABAP unterstützt Dezimalstellen in numerischen Literalen nicht, und sie sollten in Zeichenliteralen angegeben werden, wie vorgeschlagen here.
Der pitfall ist, dass CAST Operator nicht Zeichenliterale unterstützt als syntax help sagt:

Für den Operanden Operanden, Spalten col von Datenbanktabellen oder Ansichten und Hostvariablen dobj und Literale aller numerischen Typen außer Dezimal Gleitkommazahlen sind möglich.

Mögliche Abhilfe könnte folgend:

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

noch eine bessere Alternative ist zu ABAP Ausdrücke in Open SQL

SELECT 
     field1, field2, 
     CAST(field3 AS FLTP) * @(conv f('0.03')) AS out1 
    FROM table1 
    INTO TABLE @DATA(lt_table1). 
Verwandte Themen