[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2003
    Beiträge
    95

    SQL Update Num mit Char

    Hallo Leute,
    ich quäle mich für gewisse Anforderungen von RPG auf SQL umzusteigen.

    UPDATE LIB/FILE SET FeldN= substr(FeldA, 4, 13)

    FeldN ist numerisch 13
    FeldA ist alpha

    Wie kann man in SQL Felder konvertieren ?

    Danke.Mfg.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von spiceisnice
    Hallo Leute,
    ich quäle mich für gewisse Anforderungen von RPG auf SQL umzusteigen.

    UPDATE LIB/FILE SET FeldN= substr(FeldA, 4, 13)

    FeldN ist numerisch 13
    FeldA ist alpha

    Wie kann man in SQL Felder konvertieren ?

    Danke.Mfg.
    Hallo,

    alphanumerische Strings können über CAST in numerische Felder umbegesetzt werden:

    Update MyLib/MyFile
    Set FeldN = Cast(Substr(FeldA, 4, 13) as Dec(13, 0))

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Es geht auch: dec(substr(FeldA, 4, 13), 13, 0)
    Wichtig ist nur, dass rein numerische Daten im Feld stehen dürfen, sonst bricht der SQL ab.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    zusätzlich geht (meist) auch das Robert Lemke Prinzip: "welches Schweinderl hätten Sie denn gerne?". Es gibt Cast Funktionen, die so heißen wie der Typ in den man umwandeln will. Am besten mal in die SQL Reference bei den Funktionen reinschauen!

    mfg

    Dieter Bender

    Zitat Zitat von B.Hauser
    Hallo,

    alphanumerische Strings können über CAST in numerische Felder umbegesetzt werden:

    Update MyLib/MyFile
    Set FeldN = Cast(Substr(FeldA, 4, 13) as Dec(13, 0))

    Birgitta
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von BenderD
    Hallo,

    Es gibt Cast Funktionen, die so heißen wie der Typ in den man umwandeln will. Am besten mal in die SQL Reference bei den Funktionen reinschauen!
    Nur noch eine Bemerkung dazu ob man CAST oder die entsprechende Funktion verwenden sollte:

    Bei allen diesen Funktionen ist in der SQL-Referenz eine Note zu finden, die besagt, dass CAST der entsprechenden Funktion vorzuziehen sei, um maximale Portabilität zu erreichen.

    NOTE:
    Syntax alternatives:When the first argument is numeric, or the first argument is a string and the length argument is specified, the CAST specification should be used for maximal portability.
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Naja, wenn ich meine Anwendung auch mal auf Oracle o.ä. laufen lassen will, darf ich wohl Feldtypen wie "decimal" nicht unbedingt verwenden.
    Solange ich auf AS/400 (i5) bleibe, hoffe ich doch sehr stark, dass IBM die Kompatibilität nicht aus den Augen verliert.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    May 2003
    Beiträge
    95
    Mit CAST oder DEC hats funktioniert. Wie geht man vor wenn der Text Blanks enthält wie zb. GLN 12 12345 12345 1. Numerisches Feld soll dann nur 1212345123451 enthalten ?

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Tja, mit SQL schlechte Karten, da es keine Strip-Funktion gibt.
    Wenn das Format immer konstant ist, kannst du per
    dec(substr(feld, 5, 2) concat substr(feld, 8, 5) concat .....)
    den Wert bekommen.
    Ansonsten hilft dann wohl nur eine UDF (Userdefinied Function). Wie diese erstellt werden, siehe in der SQL-Referenz nach.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    leider gibt es in SQL erst ab Release V5R3M0 eine Funktion REPLACE, die es ermöglicht Zeichen aus einem String zu entfernen.

    PHP-Code:
    D MyText          S             50A   inz('ABC XYZ 1234 567890 A')
    *----------------------------------------------------------
    C/EXEC SQL                                             
    C
    Set :MyText Replace(:MyText' ''')           
    C/End-Exec                                             
                                                           
    C     MyText        Dsply 
    C                   
    Eval         *INLR = *On 
    Wenn Du diese Funktionalität vor Release V5R3M0 unbedingt in SQL braucht, hast Du nur die Möglichkeit Dir eine User Defined Function (UDF) zu stricken.

    Dabei kann es sich entweder um eine Funktion z.B. in RPG geschrieben, die als UDF registriert wird, oder die direkt in SQL geschrieben ist.

    Die folgende Funktion müsste funktionnieren:
    PHP-Code:
    Create Function MyLib/RmvCharacter                         
     
    (InString VarChar(100),RepChar VarChar(1))                
     
    returns varchar(100)                                      
     
    Language SQL                                              
    BEGIN                                                      
    Declare OutStr varchar(100);                               
    Declare 
    StrPos integer;                                    
    Set OutStr   InString;                                   
    Set StrPos   = -1;                                         
    While 
    StrPos <> Do                                       
      
    Set StrPos  locate(RepCharOutStr1);                
      If       
    StrPos 1                                      
           
    and StrPos Length(OutStr) - 1                     
      Then Set OutStr 
    substr(OutStr1StrPos 1concat   
                        substr
    (OutStrStrPos 1,             
                               
    Length(OutStr) - StrPos);       
      ElseIf   
    StrPos Length(Outstr)                         
      
    Then Set OutStr substr(OutStr1StrPos 1);         
      ElseIf   
    StrPos 1                                      
      Then Set OutStr 
    substr(OutStr2Length(Outstr) - 1); 
      
    End If;                                                  
    End While;                                                 
    Return 
    OutStr;                                             
    END 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Nov 2004
    Beiträge
    26
    Zitat Zitat von B.Hauser
    Hallo,

    leider gibt es in SQL erst ab Release V5R3M0 eine Funktion REPLACE, die es ermöglicht Zeichen aus einem String zu entfernen.

    PHP-Code:
    D MyText S 50A inz('ABC XYZ 1234 567890 A')
    *----------------------------------------------------------
    C/EXEC SQL 
    C
    Set :MyText Replace(:MyText' '''
    C/End-Exec 
     
    C MyText Dsply 
    Eval *INLR = *On 
    Wenn Du diese Funktionalität vor Release V5R3M0 unbedingt in SQL braucht, hast Du nur die Möglichkeit Dir eine User Defined Function (UDF) zu stricken.

    Dabei kann es sich entweder um eine Funktion z.B. in RPG geschrieben, die als UDF registriert wird, oder die direkt in SQL geschrieben ist.

    Die folgende Funktion müsste funktionnieren:
    PHP-Code:
    Create Function MyLib/RmvCharacter 
    (InString VarChar(100),RepChar VarChar(1)) 
    returns varchar(100
    Language SQL 
    BEGIN 
    Declare OutStr varchar(100); 
    Declare 
    StrPos integer
    Set OutStr InString
    Set StrPos = -1
    While 
    StrPos <> Do 
    Set StrPos locate(RepCharOutStr1); 
    If 
    StrPos 
    and StrPos Length(OutStr) - 
    Then Set OutStr 
    substr(OutStr1StrPos 1concat 
    substr
    (OutStrStrPos 1
    Length(OutStr) - StrPos); 
    ElseIf 
    StrPos Length(Outstr
    Then Set OutStr substr(OutStr1StrPos 1); 
    ElseIf 
    StrPos 
    Then Set OutStr 
    substr(OutStr2Length(Outstr) - 1); 
    End If; 
    End While; 
    Return 
    OutStr
    END 
    Birgitta
    Hallo Zusammen,

    bis hierher ist mir ja noch alles verständlich. Aber ein PHP-Script auf der AS400 ?? Geht das?

    Gruss,

    Thilo

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    das geht zwar auch, aber ist hier nicht gemeint, das bezieht sich auf den Server des Forums; bei dem Script handelt es sich um ein SQL Script, das man mit runsqlstmt und Co. abbrummen kann.

    mfg

    Dieter Bender

    Zitat Zitat von schwenth
    Hallo Zusammen,

    bis hierher ist mir ja noch alles verständlich. Aber ein PHP-Script auf der AS400 ?? Geht das?

    Gruss,

    Thilo
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL Update aus zwei Dateien mit 3 Schlüsselfeldern
    By mk in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 13-07-12, 08:53
  2. SQL Update über 2 i5 Systeme
    By daniel.ludwig in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 21-07-06, 12:41
  3. Update Syntax SQL
    By wuwu in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-07-06, 15:31
  4. SQL UPDATE, verknüpfung zweier Dateien
    By desti82 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-07-06, 15:25
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •