crashi09
Goto Top

Die ersten 2 stellen in einer Spalte ändern

Hallo,

Ich würde gerne auf unserem SQL Server in einer Tabelle eine Spalte ändern wie folgt. Es sollen nur die ersten 2 Stellen geändert werden.

160004854654 soll nach her 100004854654 sein

Wie kann ich das anstellen?


Update Tabelle set spalte = left(spalte,2,Len(spalte)10) where spalte1 ='16'


Danke schonmal für eure Hilfe.

Crashi09

Content-Key: 294140

Url: https://administrator.de/contentid/294140

Printed on: April 20, 2024 at 04:04 o'clock

Member: ukulele-7
ukulele-7 Jan 25, 2016 at 09:00:50 (UTC)
Goto Top
Welchen Datentypen hat denn die Spalte, ist das eine Zahl als String gespeichert?

UPDATE tabelle SET spalte = '10' + right(spalte,datalength(spalte)-2) WHERE left(spalte,2) = '16'
Member: crashi09
crashi09 Jan 25, 2016 at 09:10:56 (UTC)
Goto Top
Hallo ukulele-7


Datentyp nvarchar aktuell hat die Zahl eine Länge von 10 zeichen.

MFg

Crashi
Member: ukulele-7
ukulele-7 Jan 25, 2016 at 09:13:49 (UTC)
Goto Top
Dann sollte das Statement oben funktionieren.
Member: crashi09
crashi09 Jan 25, 2016 at 09:25:08 (UTC)
Goto Top
Hallo Ukulele-7

jetzt habe diese Zahl in der Datenbank 101600021568 die 16 sollte da nicht nehr sein.

Gruß

Crashi
Member: ukulele-7
ukulele-7 Jan 25, 2016 updated at 09:35:34 (UTC)
Goto Top
Der Wert 101600021568 entspricht nicht deinem Eingangs genannten Beispielwert 160004854654. Sollen alle 16er Werte durch 10er ersetzt werden, egal wo im String? Oder sind das eventuell immer 2er Blöcke und es dürfte z.B. bei 0160000000 nicht getauscht werden?

PS: Es sollten laut dir nur die ersten 2 Stellen geänmdert werden.
Member: crashi09
crashi09 Jan 25, 2016 at 11:36:26 (UTC)
Goto Top
Hallo Ukulele,

sorry, war mein Fehler ich meinzte die 16 sollte durch die 10 ersetzt werden. So dass die länge nicht verändert wird.
Hatte mich da falsch ausgedrückt.

Gruß

Crashi
Member: Biber
Biber Jan 25, 2016 at 11:49:03 (UTC)
Goto Top
Moin crashi09,

ähhm... wie schonend sollen wir vorgehen, wenn wir den String "101600021568" in ein NVarchar(10)-Feld pressen?
Ohne sanftes Drücken wird das nicht gehen....

Bist du sicher, dass die Feldtypen sorgfältig und adäquat ausgewählt wurden?

Das Feld scheint doch gar nicht "variabel", geschweige denn sprachabhängig zu sein, oder habe ich wieder meine üblichen Montachs-Wahrnehmungsprobleme?

Grüße
Biber
Member: ukulele-7
ukulele-7 Jan 25, 2016 at 11:50:08 (UTC)
Goto Top
UPDATE tabelle SET spalte = replace(spalte,''16,'10')

wird jede 16 durch eine 10 ersetzen, egal wo sie steht. Da 16 und 10 beide zwei Zeichen besitzen bleibt auch die Länge immer gleich.
Member: crashi09
crashi09 Jan 25, 2016 at 11:56:42 (UTC)
Goto Top
Hallo Ukulele-7


kann die die zwei zeichen (16) ab der dritten Stelle -4 Stelle löschen dan würde es passen.

Gruß Crashi
Member: Biber
Biber Jan 25, 2016 updated at 13:10:37 (UTC)
Goto Top
Moin crashi,

Zitat von @crashi09:

kann die die zwei zeichen (16) ab der dritten Stelle -4 Stelle löschen dan würde es passen.

wenn ich es denn richtig verstehe...dann:
UPDATE tabelle 
SET spalte = concat (
                               replace(Substring(spalte, 1, 2), '16', 10')  
                             , replace(Substring(spalte, 3, 2), '16' ,'')   
                            ,  replace(rtrim(substring(spalte, 5, 255)),'16', '10' )  
                   );

P.S. Hatte weiter oben eine Nachfrage gestellt.

Grüße
Biber
[Edit] Korrigiert auf Anforderung "die '16' auf Stelle 3+4 löschen[/Edit]
Member: crashi09
crashi09 Jan 25, 2016 at 15:00:12 (UTC)
Goto Top
Hallo Biber,

Sorry hatte geantwortete aber nicht gesendet.

Das Feld ist ein nvarchar (50) Feld.

Gruß Crashi
Member: Biber
Biber Jan 25, 2016 updated at 15:41:11 (UTC)
Goto Top
Moin crashi09,

na ja, dann hat sich das mit der Feldlänge ja teilweise geklärt... rein physisch passt also ein String der Länge 12 (oder gar 50) da rein.

Habe ich das denn jetzt richtig verstanden, dass du
  • aus dem bisherigen String der Länge 12 einen String der Länge 10 machen willst?
  • wobei alle Feldinhalte bisher linksbündig erfasst wurden und alle Strings heute auch 12 Stellen lang sind?
  • falls die Ziffern auf Pos. 3+4 gleich '16' sind, dann solle diese 2 Ziffern gelöscht werden?
  • und/oder, wie ukulele-7 es verstanden hat: sollen alle Vorkommnisse '16' im String durch '10' ersetzt werden?
  • oder gilt es auch/zusätzlich für die Pos 1+2, also die ersten beiden Zeichen im String, dass '16' durch '10' ersetzt werden sollen?

Bitte versuche noch mal die Anforderung ggf. mit einem kleinen Beispiel zu skizzieren.
Mir ist es nach 3x Hin- und Her nicht ganz klar.

Grüße
Biber
Member: crashi09
crashi09 Jan 26, 2016 at 06:16:19 (UTC)
Goto Top
Hallo Biber,


ich habe in der Spalte eine Zahl drin stehen bestehend aus 10 Zeichen

1600000025 jetzt würde ich gerne, die beiden ersten stellen(16) gegen die (10) ersetzen der rest der Zahl soll so bleiben auch die länge von 10 Zeichen.

MFG

Crashi
Member: ukulele-7
ukulele-7 Jan 26, 2016 at 06:59:23 (UTC)
Goto Top
Genau das müsste bei

UPDATE tabelle SET spalte = '10' + right(spalte,datalength(spalte)-2) WHERE left(spalte,2) = '16'

passieren.
Member: crashi09
crashi09 Jan 26, 2016 at 07:04:25 (UTC)
Goto Top
Hallo Ukulele

wenn ich das mache, habe ich die 10 vor 16 stehen und 12 Zeichen anstatt 10.

Er ersetzt die 16 nicht durch die 10 sondern fügt Sie davor ein.

MFG

Crashi
Member: ukulele-7
ukulele-7 Jan 26, 2016 at 07:12:54 (UTC)
Goto Top
Hm okay mit VARCHAR() geht das. Dann nimm

UPDATE tabelle SET spalte = '10' + right(spalte,len(spalte)-2) WHERE left(spalte,2) = '16'
Member: ukulele-7
ukulele-7 Jan 26, 2016 at 07:18:13 (UTC)
Goto Top
PS: Hier die Erklärung:

http://blogs.lessthandot.com/index.php/datamgmt/dbprogramming/the-diffe ...

Sry ich hab in letzter Zeit nur mit VARCHAR() gearbeitet und setze da fast nur noch datalength() ein um Längen zu bestimmen.
Member: crashi09
crashi09 Jan 27, 2016 updated at 11:48:00 (UTC)
Goto Top
Hallo;

Hier mal der Aufbau der tabelle;
Spalte1  Spalte2    spalte 3 
1257	10	         1000021722	1	
3735	16	         1600040034	1	

ich möchte jetzt die spalte 3 ändern so dass die Zahl wo spalte2 (16) ist die Spalte 3 anstatt der 16 vorne dann die 10 stehen hat

Gruß

Crashi

[Edit Biber] Codeformatierung für die Tabelle.[/Edit]
Member: ukulele-7
Solution ukulele-7 Jan 27, 2016 updated at 10:42:22 (UTC)
Goto Top
UPDATE tabelle SET spalte3 = '10' + right(spalte3,len(spalte3)-2) WHERE spalte2 = '16' AND left(spalte3,2) = '16'

Er ändert Spalte3 wenn Spalte2 auf 16 steht und Spalte3 mit 16 anfängt auf 10 + Rest.
Member: crashi09
crashi09 Jan 27, 2016 at 10:43:28 (UTC)
Goto Top
Hallo Ukulele,


besten Dank für die kompetente Hilfe


Gruß Crashi