Erste 3 Zeichen sollen bleiben, Rest soll gelöscht werden (mssql server)

LauraM

Ensign
Registriert
Nov. 2019
Beiträge
133
Hallo,
vielen Dank für die bisherige Hilfe.
Ich habe eine Spalte, sie so aussieht:
001.23
001.9543
Ich möchte in der Spalte alls was nach 3. Zahl kommt löschen, also damit es so dann aussieht:

001
001

Ich habe versucht mit (nummer):
select left ('nummer',3) from tab

aber das ist nicht das. Wie kann ich tatsächlich löschen den rest nach 3 Zahlen?

Das funktioniert auch nicht:

update tab set nummer = substr(nummer,6)
 
Hallo Laura,

Wer lesen kann ist klar im Vorteil... 😂

Mit welcher Programmiersprache bist denn unterwegs?
Muss abgeschnitten werden ohne zu Runde ?

Viele Grüße
Der_kleine_Nils
 
Sorry, habe ich vergessen zu erwähnen: mssql server
Ich möchte nicht runden, ich möchte gerne einfach nach 3 Zahl, den Rest löschen.
 
Hmm, SQL ist zwar mal bei mir mit angesagt gewesen, aber da komme ich auf die Schnelle nicht rein... Sorry.
wenn mir jetzt zumindest der richtige Begriff einfielen zum Runden bzw. gerade nicht runden...

Aber für alle anderen... Du benötigst als Ausgabe ganze Zahlen? Sind die alle positiv?

Viele Grüße
Der_kleine_Nils
 
LauraM schrieb:
Ich habe eine Spalte, sie so aussieht:
Es ist eigentlich vollkommen egal wie die Spalte aussieht, entscheidend sind solche nebensächlichen Informationen wie der Datentyp.
 
Der Datentyp ist natürlich irgendein varchar, wie wir vom vorherigen Thread wissen :D

LauraM schrieb:
select left ('nummer',3) from tab
Wenn du jetzt noch die Hochkommata entfernst, klappt das auch... lies dich doch mal in die Syntax ein oder google nach Beispielen, das macht jeder andere auch.
Wie es aktuell ist, nimmst du die ersten 3 Zeichen von "nummer", also "num". Du willst aber sicherlich, dass die Spalte mit dem Namen nummer verwendet wird...
 
Und selbst wenn es kein varchar ist ...

SQL:
select left(convert(nvarchar,nummer),3) from tab

Wie bekloppt das auch ist - viel mehr kaputt machen kann man an der DB wohl nix mehr, wenn ich mir die bisherigen Fragen so ansehe ;)
 
Enurian schrieb:
wie wir vom vorherigen Thread wissen
Von welchem vorherigen Thread denn? Das Thread/Beitrag-Verhältnis von @LauraM liegt aktuell bei 19/115, also alle 6 Beiträge ein neuer Thread. Da kann man kaum noch den Überblick behalten was wie wohin gehört.
 
Raijin schrieb:
Von welchem vorherigen Thread denn? Das Thread/Beitrag-Verhältnis von @LauraM liegt aktuell bei 19/115, also alle 6 Beiträge ein neuer Thread. Da kann man kaum noch den Überblick behalten was wie wohin gehört.
Und jetzt weißt Du auch wie in seiner/ihrer Datenbank aussieht. ;)
 
  • Gefällt mir
Reaktionen: areiland
Defender1st schrieb:
Und selbst wenn es kein varchar ist ...

SQL:
select left(convert(nvarchar,nummer),3) from tab

Wie bekloppt das auch ist - viel mehr kaputt machen kann man an der DB wohl nix mehr, wenn ich mir die bisherigen Fragen so ansehe ;)
Hallo, es war nur zum Ausprobieren.

xdave78 schrieb:
Hast Du
SUBSTRING ( expression ,start , length )
ausprobiert? Denn offensichtlich ist das was Du angegeben hast ja keine Zahl sondern ein String.

SUBSTRING ( MyColumn, 1 , 3 ) in dem Fall
Danke, es hat funktioniert.
Das habe ich als Abfrage. Ich möchte das Ergebnis in der Tabelle direkt haben.
Gib es Möglichkeit, doch in der Saplte direkt die zeichen ab "." löschen?
 
LauraM schrieb:
Ich möchte in der Spalte alls was nach 3. Zahl kommt löschen, also damit es so dann aussieht:
Allein schon dieser Satz ist semantisch so unklar ...
1. ist der Datentyp der Spalte ein numerischer?
2. Ziffer vs Zahl
3. Willst du wirklich hard-codiert die ersten 3 Ziffern oder willst du doch einfach alles for dem Komma?

LauraM schrieb:
Das funktioniert auch nicht:

update tab set nummer = substr(nummer,6)
wieder mal schaffst du es nicht zu beschreiben was genau nicht geht bzw. was passiert ... und hast du dir ein mal die Dokumentation endlich angesehen? ich verstehe nicht wie du arbeitest, wuerfelst du zwischendurch irgendwelche Fragmente aus dem Internet zusammen?
1. ist der Datentyp eine Zahl oder ein String?
2. hier fuer dich die Syntax : SUBSTRING ( expression ,start , length )
3. und dann, was soll die 6 machen? Du wolltest doch 3 Stellen haben, oder nicht?

EDIT:

LauraM schrieb:
Danke, es hat funktioniert.
wow ... Du liest keine Docs und machst das mit Absicht alles, oder?

LauraM schrieb:
Gib es Möglichkeit, doch in der Saplte direkt die zeichen ab "." löschen?
kannst du nicht die Aufgabe gleich genau spezifizieren? Du willst doch einfach nur alle Stellen vor dem Komma haben ...

Nochmal, ist der Datentyp eine Zahl?

Und um deine Frage zu beantworten: Ja, mit SQL UPDATE? ODer geht das bei dir wieder nicht? Wenn nein, was geht nicht.
 
https://docs.microsoft.com/de-de/sql/t-sql/functions/charindex-transact-sql?view=sql-server-ver15

Damit kannst du die Position eines Zeichens suchen und diese Position dann als Ausgangspunkt für einen Substring verwenden.


LauraM schrieb:
Gib es Möglichkeit, doch in der Saplte direkt die zeichen ab "." löschen?
Ja was nu? Entscheide dich doch wenigstens mal was du überhaupt willst. Die Leute in deinen Threads helfen dir in ihrer Freizeit und das auch noch umsonst.

Wenn du schon von banalen String-Funktionen wie Substring, Replace oder in diesem Fall auch der Suche nach einem Zeichen innerhalb eines Strings überfordert bist, dann hol dir doch bitte bitte endlich jemanden an deine Seite, der programmieren KANN. Wobei 95% deiner bisherigen Threads nur dazu dienen, deine schlechte Datenbasis auszubügeln, weil du irgendwann am Anfang einfach eine CSV in die Datenbank importiert hast, ohne vorher die Inhalte zu prüfen/zu überarbeiten. Alle deine Threads sind gewissermaßen Folgefehler davon.
 
  • Gefällt mir
Reaktionen: areiland
Mal abgesehen davon, bei MSSQL kann man Kommastellen einfach abschneiden mit round :

ROUND ( numeric_expression , length [ ,function ] )
und nein, das ist nicht zwangslaeufig runden, der 3. Parameter gibt die Funktion an, jeder Wert der nicht 0 ist, bedeutet einfach nur abschneiden.
also
round(123.45, 0, 1) ->123

Sollte die Spalte tatsaechlich vom Datentyp VARCHAR oder so sein, dann gute Nacht.
Also bitte mal den Datentyp nennen. Danke.
 
Zuletzt bearbeitet:
LauraM schrieb:
Hallo, es war nur zum Ausprobieren.


Danke, es hat funktioniert.
Das habe ich als Abfrage. Ich möchte das Ergebnis in der Tabelle direkt haben.
Gib es Möglichkeit, doch in der Saplte direkt die zeichen ab "." löschen?
Nein. Da es sich um eine Abfrage handelt. Immer im Hinterkopf behalten, dass SQL eine reine ABFRAGEsprache ist. Um die Daten umzuwandeln würde ich vorschlagen, dass Du es - je nachdem wo Du sie einsetzt, das ist ja bisher unbeantwortet- entweder ein Script in PHP oder was auch immer schreibst, was dir die Daten konvertiert. Oder du machst Dir ein Dump, welches Du dann direkt bearbeiten oder durch ein Script jagen kannst. Oder Du machst es bei nicht zu großen Mengen so wie ich es bei kleinen Datenmengen mache (worüber die Cracks sicherlich lachen): Alles in EXCEL/ ACCESS exportieren und anschließend wieder in die Datenbank zurückspielen nachdem die Daten umgewandelt wurden. Wenn fortlaufend neue ("falsche") Daten in dieser Spalte erzeugt werden, musst Du sicherlich das Problem da beheben wo es verursacht wird: bei der Eingabe/ Erzeugung.
 
xdave78 schrieb:
Nein. Da es sich um eine Abfrage handelt. Immer im Hinterkopf behalten, dass SQL eine reine ABFRAGEsprache ist. Um die Daten umzuwandeln würde ich vorschlagen,
ich kann dir nicht ganz folgen ... warum sollte sie nicht mit SQL Update die Werte einer Spalte aendern koennen?
du kannst doch
update table_name set column_name = expression
also im konreten Fall hier
update tab set nummer = round(nummer, 0, 1)
machen, oder was funktioniert daran nicht?
 
  • Gefällt mir
Reaktionen: DubZ und AwesomSTUFF
Guten Morgen,

Dake Euch für Kritk (muss auch nehmen) und für die Antworte. ich habe es so gemacht, wie xdave78 geschrieben hat.

Schönen Tag!
 
Zurück
Oben