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

update COLUMN where FIELD is not null

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von chgs2013, 24 Mai 2013.

  1. chgs2013

    chgs2013 Aktiver Benutzer

    Hallo,

    ich komme nicht weiter, ich möchte meine SQL Datenbank automatisiert bearbeiten, sprich Schreibweise berichtigen.

    So würde ich das tun:
    Code:
    UPDATE tkunde SET
    cVorname = UPPER (LEFT(cVorname,1)) + RIGHT(cVorname, LEN(cVorname)-1),
    cName = UPPER (LEFT(cName,1)) + RIGHT(cName, LEN(cName)-1),
    Where tkunde = '1000'
    Nun habe ich das Problem, dass wenn das Feld mal NULL wäre, stoppt diese Prozedur natürlich ab.
    Wie kann ich vorab prüfen, ob dieses Feld nicht leer ist?

    Danke
     
  2. Tommi

    Tommi Datenbank-Guru

    Hi,

    dafür stellt man einfach eine CASE...WHEN...THEN-Klausel ein:

    Code:
    UPDATE tkunde SET
    cVorname = (CASE WHEN LEN(ISNULL(cVorname,''))>2 THEN UPPER (LEFT(cVorname,1)) + RIGHT(cVorname, LEN(cVorname)-1) ELSE cVorname END),
    cName = (CASE WHEN LEN(ISNULL(cName,''))>2 THEN UPPER (LEFT(cName,1)) + RIGHT(cName, LEN(cName)-1) ELSE cName END),
    Where tkunde = '1000'
    Ich habe hier auch gleich mal die Länge der Einträge mit berücksichtigt, damit Fehler nicht durch einen negativen Zahlenwert in der LEFT() oder RIGHT()-Funktion auftreten.


    Viele Grüße,
    Tommi
     
  3. ukulele

    ukulele Datenbank-Guru

    Du kannst auch im WHERE Teil AND cVorname IS NOT NULL einfügen oder mit der Funktion isnull () arbeiten. Ich würde dir auf jedenfall empfehlen, per WHERE Bedingung auch nur die Datensätze "zu bearbeiten", die das auch nötig haben.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Hi,

    eine Antwort hast ja schon, was ich nicht ganz verstehe: warum Update in der DB, warum via Prozedur, warum sollte das bei einem NULL-Wrert stoppen?

    Code:
    test=# create table chgs (id serial, name text);
    NOTICE:  CREATE TABLE will create implicit sequence "chgs_id_seq" for serial column "chgs.id"
    CREATE TABLE
    test=*# copy chgs (name) from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> test
    >> TEST
    >>
    >> tEsT
    >> TeSt
    >> \.
    test=*# select * from chgs;
     id | name
    ----+------
      1 | test
      2 | TEST
      3 |
      4 | tEsT
      5 | TeSt
    (5 rows)
    
    test=*# select initcap(name) from chgs ;
     initcap
    ---------
     Test
     Test
    
     Test
     Test
    (5 rows)
    
    test=*# update chgs set name=initcap(name);
    UPDATE 5
    test=*# select * from chgs;
     id | name
    ----+------
      1 | Test
      2 | Test
      3 |
      4 | Test
      5 | Test
    (5 rows)
    
    Wie man sieht, kann man das auch im Select recht einfach machen, es stören keine NULL-Werte und man braucht auch keine Procedur, um alle Records zu updaten.
     
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