1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

String mit Insert Into in zwei/drei Felder verteilen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von mindhunter, 29 April 2016.

  1. mindhunter

    mindhunter Benutzer

    Hallo,

    in einer Datentabelle gibt es ein Bemerkungsfeld von Typ VARCHAR2(4000 bytes). Der Feld kann nur eine bestimmte Feldlänge aufnehmen. Gerne würde ich, sobald der String länger als das Datentayp ist, den String genau auf Feldlänge zerlegen und den Rest in ein zusätzliches Feld einfügen.

    Wenn String < 4000 Byte dann,
    INSERT INTO suppliers (bemerkung) VALUES ("String < 4000 Byte");
    sonst
    INSERT INTO suppliers (bemerkung, bemerkung2) VALUES ("String > 4000 Byte", "String >4000 Byte");

    Wenn der String > 4000 Byte, dann String auf Bemerkung und Bemerkung1 verteilen. Mit einem Select-Befehl soll das Ganze dann wieder zusammen gesetzt warden.


    Wenn String < 4000 Byte dann,
    SELECT bemerkung from suppliers;

    Wenn bemerkung und bemerkung2 belegt, dann
    SELECT bemerkung & bemerkung2 from suppliers;


    Liebe Grüße
    Stefan
     
  2. ukulele

    ukulele Datenbank-Guru

    Woher kommt denn beim INSERT dein String, aus einer Variablen?

    Insert:
    Code:
    INSERT INTO suppliers(bemerkung,bemerkung2)
    VALUES(left("String > 4000 Byte",4000),(CASE WHEN len("String >4000 Byte")>4000 THEN right("String >4000 Byte",len("String >4000 Byte")-4000) ELSE NULL END));
    Select:
    Code:
    SELECT bemerkung + isnull(bemerkung2,'') AS bemerkung from suppliers
     
  3. Dukel

    Dukel Datenbank-Guru

    Wieso aufteilen auf zwei Bemerkungsfelder und nicht das vorhandene Feld groß genug machen?
     
  4. mindhunter

    mindhunter Benutzer

    Der String kommt mit einer Variablen (Bemerkung).
     
  5. mindhunter

    mindhunter Benutzer

    Der Datentyp VARCHAR2 ist auf 4000Byte begrenzt.
     
  6. Dukel

    Dukel Datenbank-Guru

  7. mindhunter

    mindhunter Benutzer

    Jetzt habe ich noch eine Frage. Wie würde die Update-Syntax aussehen?
     
  8. akretschmer

    akretschmer Datenbank-Guru

    was willst Du updaten?
     
  9. mindhunter

    mindhunter Benutzer

    Falls es den Datensatz bereits gibt, dann ein UPDATE anstatt der INSERT-Anweisung von oben.

    Ist die Feldlänge im Feld bemerkung kleiner als 4000 Byte, dann trage den Wert in das benannte Feld ein. Ist der Wert größer 4000 Byte, dann verteile auf bemerkung und bemerkung1

    UPDATE suppliers
    SET bemerkung = 'String > 4000 Byte',
    bemerkung1 = 'String 4000 Byte'
    WHERE matnr ='blabla';
     
  10. ukulele

    ukulele Datenbank-Guru

    Das kannst du genauso handhaben wie beim INSERT:
    Code:
    UPDATE   suppliers
    SET     bemerkung = left("String > 4000 Byte",4000),
         bemerkung2 = (CASE WHEN len("String >4000 Byte")>4000 THEN right("String >4000 Byte",len("String >4000 Byte")-4000) ELSE NULL END)
    WHERE   ID = ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden