SQLScript Grundlagen

Numerische Datentypen in SQLScript

(C) Brandeis Consulting.

Numerische Datentypen

Datentyp Zahlentyp Länge/Wertebereich
TINYINT Ganzzahl 0-255
SMALLINT Ganzzahl +/- 32 767
INTEGER oder INT Ganzzahl +/- 2 147 483 647
BIGINT Ganzzahl +/- 9 223 372 036 854 775 807
DECIMAL(p, s)
oder DEC(p, s)
Festkommazahl p = 1-38 Stellen
s = 0-p NK Stellen
DECIMAL
oder DEC
Dezimale
Gleitkommazahl
Mantisse bis 34 Stellen
Exponent von -6 111 bis +6176
SMALLDECIMAL Dezimale
Gleitkommazahl
Mantisse bis 16 Stellen
Exponent von -369 bis +368
REAL Binäre Gleitkommazahl 32 Bit
DOUBLE Binäre Gleitkommazahl 64 Bit
FLOAT(n) Binäre Gleitkommazahl 32 oder 64 Bit
(C) Brandeis Consulting.

SQL-Funktionen zum Rechnen

  • NDIV0(<Zähler>, <Nenner>) – Division, falls der Nenner <> 0, ansonsten 0
  • MOD(<Zähler>, <Nenner>) – Modulo = Divisionsrest
  • POWER(<Basis>, <Exponent>) – Potenzieren
  • SQRT(<Zahl>) – Quadratwurzel
  • LN( <Wert>) – Natürlicher Logarithmus
  • EXP( <Wert>) – Umkehrfunktion von LN(), e hoch Wert
  • LOG(<Basis>, <Wert>) – Beliebiger Logarithmus

Trigonometrische Funktionen – gibt es auch, interessiert hier aber niemanden.

(C) Brandeis Consulting.

SQL-Funktion ROUND()

Zum Runden gibt es die SQL-Funktion ROUND(,,[])

Modus Beschreibung
ROUND_HALF_UP Defaultmodus - Kaufmännisches Runden zu dem glatten Wert, der dem zu rundenden Wert am nächsten ist. Falls dieser exakt zwischen den beiden glatten Werten liegt, ist betragsmäßig aufzurunden.
ROUND_HALF_DOWN Analog ROUND_HALF_UP, nur im Zweifel betragsmäßig abrunden.
ROUND_HALF_EVEN Analog den vorigen beiden, im Zweifel aber zu dem Wert runden, der in der letzten Stelle gerade ist.
ROUND_UP Immer betragsmäßig aufrunden
ROUND_DOWN Immer betragsmäßig abrunden
ROUND_CEILING Immer aufrunden
ROUND_FLOOR Immer abrunden
(C) Brandeis Consulting.

SQL-Funktion ROUND()

Die Anzahl der Stellen darf auch negativ sein. Wenn z.B. auf ganze Tausender gerundet werden soll:

SELECT ROUND( 123456789.12, -3, ROUND_HALF_UP ) FROM DUMMY;
Ergibt:       123457000    
(C) Brandeis Consulting.

SQL-Funktionen zum Runden auf Ganzzahlen

Mit CEIL() und FLOOR() wird auf die nächste ganze Zahl auf- oder abgerundet. Das gilt auch für negative Zahlen.

(C) Brandeis Consulting.

Vorzeichen

Für die Verarbeitung von Vorzeichen gibt es drei SQL-Funktionen:

  • ABS(<Wert>) liefert den Absolutwert
  • SIGN(<Wert>) liefert in Abhängigkeit vom Vorzeichen entweder -1 oder 1
  • UMINUS(<Wert>) dreht das Vorzeichen um. * -1 geht aber auch.
(C) Brandeis Consulting.

Mengen und Beträge

Im Gegensatz zu ABAP gibt es keine Abhängigkeit zwischen den Datenfeldern Menge und Einheit bzw. Betrag und Währung.
Eine Menge oder ein Betrag ist eine ganz normale Zahl
Die Anzahl der Nachkommastellen ist immer gleich

Für die Währungsumrechnung und Mengenumrechnung gibt es eingebaute SQL-Funktionen.
Die Umrechnungstabellen
Für die Einheitenumrechnung müssen Tabellen analog T006 und T006D vorhanden und gepflegt sein.
Für die Währungsumrechnung werden Tabellen analog TCURX, TCURV, TCURN, TCURR und TCURF benötigt.

Falls die Tabellen des NetWeavers verwendet werden sollen, muss im Parameter SCHEMA das entsprechende NW-Schema angegeben werden. Abweichende Tabellennamen können den Umrechnungsfunktionen per Parameter mitgeteilt werden.

(C) Brandeis Consulting.

Einheitenumrechnung mit CONVERT_UNIT()

Die Einheitenumrechnung erfolgt mit der SQL-Funktion CONVERT_UNIT(). Dabei handelt es sich nur um eine Umrechnung zwischen physischen Einheiten, also z.B. Kilogramm in Gramm.

Eine materialzpezifische Umrechnung, unter Berücksichtigung der Faktoren aus der Tabelle MARM, muss bei Bedarf selber implementiert werden.

(C) Brandeis Consulting.

Parametriseriung von CONVERT_UNIT()

Parameter Beschreibung
QUANTITY Ausgangsmenge, die umgerechnet werden soll.
SOURCE_UNIT Einheit der Ausgangsmenge
TARGET_UNIT Zieleinheit, in die umgerechnet werden soll
CLIENT Mandant, aus dem die Umrechnungsfaktoren gelesen werden, siehe grauer Infokasten
SCHEMA Das Datenbankschema, in dem die Umrechnungsfaktoren gespeichert sind.
ERROR_HANDLING fail on error (default), set to null oder  keep unconverted
(C) Brandeis Consulting.

Beispiel für die Mengenumrechnung

CREATE TABLE mengen ( menge   DECIMAL(15,2),
                      einheit VARCHAR(3) ) ;
INSERT INTO mengen VALUES(1.0,'MG') ;
INSERT INTO mengen VALUES(1.0,'G') ;
INSERT INTO mengen VALUES(1.0,'KG') ;
INSERT INTO mengen VALUES(1.0,'TO') ;
INSERT INTO mengen VALUES(1.0,'XYZ') ;
SELECT
      menge                         AS "Menge",
      einheit                       AS "Einheit",
      CONVERT_UNIT(
             QUANTITY       => menge,                 
             SOURCE_UNIT    => einheit,                  
             SCHEMA         => current_schema,
             TARGET_UNIT    => 'KG',                            
             ERROR_HANDLING => 'set to null',                
             CLIENT         => '000')              
                                    AS "Menge in Kg", 
      'Kg'                          AS "Kg"
   FROM mengen;

(C) Brandeis Consulting.

Währungsumrechnung mit CONVERT_CURRENCY()

Parameter Ref. Beschreibung
AMOUNT Ja Der zu konvertierende Betrag
SOURCE_UNIT Ja Die Währung des Betrags AMOUNT
TARGET_UNIT Ja Die Zielwährung der Konvertierung
REFERENCE_DATE Ja Der Stichtag für die Kursermittlung
CONVERSION_TYPE Nein Legt den Kurstypen fest, der bei der Konvertierung verwendet werden soll.
SCHEMA Nein Das Datenbankschema, in dem die Konvertierungstabellen liegen
CLIENT Ja Der Mandant, für den die Konvertierungsinformationen ermittelt werden
ERROR_HANDLING Nein fail on error (default), set to null oder  keep unconverted
(C) Brandeis Consulting.

Beispiel für die Währungsumrechnung

CREATE TABLE betraege(   betrag   DEC(17,2),
                         waehrung VARCHAR(3) ) ;
INSERT INTO betraege VALUES(89.90,'EUR') ;
INSERT INTO betraege VALUES(17.20,'USD') ;
INSERT INTO betraege VALUES(4.54,'GBP') ; 

SELECT
      betrag                       AS "Betrag",
      waehrung                     AS "Währung", 
      CONVERT_CURRENCY( AMOUNT             => betrag, 
                        SOURCE_UNIT        => waehrung,
                        SCHEMA             => current_schema,
                        TARGET_UNIT        => 'USD',
                        REFERENCE_DATE     => '2013-09-23', 
                        CLIENT             => '000',
                        CONVERSION_TYPE    => 'M') 
                                   AS "Betrag in USD",
      'USD'                        AS "USD"
   FROM betraege;

DROP TABLE betraege;

(C) Brandeis Consulting.