PDA

View Full Version : SQL UPDATE REPLACE begrenzt auf bestimmte Feldlänge!



svente
16-09-14, 12:46
Servus,

ich habe ein Feld das 30 Stellen lang ist. In diesem Feld muss der Name geändert werden.

Bsp. <code class="literal">

UPDATE artikelstamm
SET bez1 = REPLACE (bez1, 'Artikel', 'ARTIKEL®')
where bez1 like 'Artikel-%';

Das ist ja alles kein Problem wenn das Feld mit max. 29 Zeichen belegt ist. Aber wenn es schon 30 Zeichen hat, dann kommt er auf Fehler. Ist ja auch klar.
Das Feld kann ich nicht vergrößern. Gibt es eine Möglichkeit die Abfrage mit einer Längenabfrage zu kombinieren? Sodas er nur die Inhalte mit max. 29 Zeichen Länge ändert.



</code>

Fuerchau
16-09-14, 12:51
Wie wäre es mit "...length(rtrim(myfield))..."?

malzusrex
16-09-14, 13:11
Versuche es doch mal mit


update artikelstamm
set bez1 = SubStr( Replace( bez1, 'Artikel', 'ARTIKEL®'), 1, 30)
where bez1 like 'Artikel-%'

Alledings wird hier das letzte Zeichen "getötet"

Gruß
Ronald

svente
16-09-14, 13:13
Das Feld ist ja schon ab Stelle 1 gefüllt. Das Problem ist halt nur wenn es mit genau 30 Stellen gefüllt ist, dann kann ich das Zeichen nicht mehr hinzufügen, weil das Feld zu klein ist. Ich wollte genau die nur ändern die kleiner 30 sind. :)

malzusrex
16-09-14, 13:29
Es bleibt ja auch ab Stelle 1 gefüllt.
Wenn die Bezeichnung schon 30 Zeichen lang ist, dann macht er durch das REPLACE 31 Zeichen daraus.
Das SUBSTR macht dann wieder 30. Allerdings geht das ganz rechte Zeichen auf diese Weise verloren.
Ist die Bezeichnung vorher kleiner 30, dann ändert er den Text und gut ist.
Wenn du nur die ändern willst, wo noch ein Zeichen frei ist, dann muss du die Länge das Feldes mit in die where-Bedingung packen.



update artikelstamm
set bez1 = Replace( bez1, 'Artikel', 'ARTIKEL®')
where bez1 like 'Artikel-%'
and length(rtrim(bez1)) < 30

svente
16-09-14, 13:32
Ah, jetzt ist der Groschen gefallen. :)
Werde das ganze ausprobieren und dann hier berichten. Vielen Dank erstmal an euch beiden.

svente
16-09-14, 13:43
Danke, klappt prima.