MS SQL Select zwei Nullen voranstellen

rolandg1881

Aktiver Benutzer
Beiträge
40
Hallo!
Kurze Frage an die Profis.

Ich habe in einer Tabelle (MSSQL2019) ein smallinteger Feld in dem beispielsweise die Nummer 3 eingetragen ist. Dann habe ich noch ein weiteres char Feld wo ein P drinsteht.
Ich bräuchte eine Abfrage wo ich der Nummer 3 zwei Nullen voranstelle und diesem Wert dann das P vorne einfüge also daraus P003 werden.

Hat jemand eine Lösung wie ich das anstelle?

Würde mich über Antworten freuen.

lg Roland
 
Werbung:
Code:
postgres=# select * from rolandg1881 ;
 nr | anderes_feld 
----+--------------
  3 | P
(1 row)

postgres=# select anderes_feld || trim(to_char(nr, '000')) from rolandg1881 ;
 ?column? 
----------
 P003
(1 row)
 
Hallo!
Kurze Frage an die Profis.

Ich habe in einer Tabelle (MSSQL2019) ein smallinteger Feld in dem beispielsweise die Nummer 3 eingetragen ist. Dann habe ich noch ein weiteres char Feld wo ein P drinsteht.
Ich bräuchte eine Abfrage wo ich der Nummer 3 zwei Nullen voranstelle und diesem Wert dann das P vorne einfüge also daraus P003 werden.

Hat jemand eine Lösung wie ich das anstelle?

Würde mich über Antworten freuen.

lg Roland
Oder für MS SQL Server zum Beispiel:

select 'P00' + convert(varchar(x), integer_spalte)
from table;
 
select 'P00' + convert(varchar(x), integer_spalte)
Das ergibt vielleicht nicht das Gewünschte, falls die <integer_spalte> eine mehrstellige Zahl darstellt. Es ist auch nicht durch die Angaben von X zu beeinflussen, wie im postgres Beispiel. Ein hinreichend kleines X im Verhältnis zur zu konvertierenden Zahl zerstört die Darstellung sogar. (Überlauf)
Danke für die Übersetzung t-aql!
Eine äquivalente Übersetzung der Postgres Version ist es also nicht. Es funktioniert nur für einstellige Zahlen.
 
Ich schrieb ja von gewünschtem. Wenn das X immer hinreichend groß ist, schwankt die Ausgabe der Funktion von
p001
bis
p00999
 
Ich schrieb ja von gewünschtem. Wenn das X immer hinreichend groß ist, schwankt die Ausgabe der Funktion von
p001
bis
p00999
Für X = 3, haste recht.
Man kanns aber auch so machen:
select prefix + '00' + convert(varchar(max), integer_spalte)
from table;
Damit können dann 2GB Lange Strings dargestellt werden. Sollte reichen.
Oder so:
select prefix + '00' + cast(integer_spalte as varchar)
from table;
 
Werbung:
Im Prinzip gings mir nur um den Ansatz und ich glaube den hab ich. Ich werde es morgen testen.

Die 003 beschreibt in diesem Fall die Nummer für eine bestimmte Geschäftsstelle das P003 Feld wird dann noch weiter ergänzt.

Hintergrund ich habe zwei Systeme mit zwei Datenbanken.
In der einen Datenbank habe ich eine Spalte mit einem Keywert sagen wir P00320180503xxx im zweiten System habe ich auch alle diese Werte aber nicht in einer Spalte sondern in mehreren.

Ich muss die beiden Datenbanken abgleichen da auf Grund einer fehlerhaften Schnittstelle eine der beiden nicht mehr Vollständig ist....

Hat keiner bemerkt, ich muss es beheben. Eh klar. ;-)

Nur kurz als Hintergrund wozu ich es brauche.

Danke auf jeden Fall für die Hilfe!

lg Roland
 
Zurück
Oben