update COLUMN where FIELD is not null

chgs2013

Aktiver Benutzer
Beiträge
37
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
 
Werbung:
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
 
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.
 
Werbung:
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

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.
 
Zurück
Oben