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-ID: 294140

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

ukulele-7
ukulele-7 25.01.2016 um 10:00:50 Uhr
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'
crashi09
crashi09 25.01.2016 um 10:10:56 Uhr
Goto Top
Hallo ukulele-7


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

MFg

Crashi
ukulele-7
ukulele-7 25.01.2016 um 10:13:49 Uhr
Goto Top
Dann sollte das Statement oben funktionieren.
crashi09
crashi09 25.01.2016 um 10:25:08 Uhr
Goto Top
Hallo Ukulele-7

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

Gruß

Crashi
ukulele-7
ukulele-7 25.01.2016 aktualisiert um 10:35:34 Uhr
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.
crashi09
crashi09 25.01.2016 um 12:36:26 Uhr
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
Biber
Biber 25.01.2016 um 12:49:03 Uhr
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
ukulele-7
ukulele-7 25.01.2016 um 12:50:08 Uhr
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.
crashi09
crashi09 25.01.2016 um 12:56:42 Uhr
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
Biber
Biber 25.01.2016 aktualisiert um 14:10:37 Uhr
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]
crashi09
crashi09 25.01.2016 um 16:00:12 Uhr
Goto Top
Hallo Biber,

Sorry hatte geantwortete aber nicht gesendet.

Das Feld ist ein nvarchar (50) Feld.

Gruß Crashi
Biber
Biber 25.01.2016 aktualisiert um 16:41:11 Uhr
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
crashi09
crashi09 26.01.2016 um 07:16:19 Uhr
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
ukulele-7
ukulele-7 26.01.2016 um 07:59:23 Uhr
Goto Top
Genau das müsste bei

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

passieren.
crashi09
crashi09 26.01.2016 um 08:04:25 Uhr
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
ukulele-7
ukulele-7 26.01.2016 um 08:12:54 Uhr
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'
ukulele-7
ukulele-7 26.01.2016 um 08:18:13 Uhr
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.
crashi09
crashi09 27.01.2016 aktualisiert um 12:48:00 Uhr
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]
ukulele-7
Lösung ukulele-7 27.01.2016 aktualisiert um 11:42:22 Uhr
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.
crashi09
crashi09 27.01.2016 um 11:43:28 Uhr
Goto Top
Hallo Ukulele,


besten Dank für die kompetente Hilfe


Gruß Crashi