Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Wie schaffe ich es in einer Abfrage einer einstelligen Zahl eine führende 0 vorzustellen, weil die Zahlen MÜSSEN zweitellig sein. z.B. 1 -> 01; 4->04

BÜDDEEEEEEEE helft mir *GG*

Gruss Durone

Geschrieben

*seufz*

Und wieder mal die Standardfragen.... :(

Macht doch bitte etwas genauere Angaben!

Welche Datenbank benutzt du?? Falls du eine Programmiersprache benutzt, welche?? Welchen Datentyp hat dein Feld??

Geschrieben

ups, sorry....

also ich greife über Access 2002 auf den MS SQL Server 2000 zu. Das ganze versuche ich in einen VBA-Code zu integrieren. Der wert den ich haben will, wird aus zwei Integerfeldern zusammengeführt, dabei will ich eben das zweite Feld mit einer führenden null haben, ob ich daraus aber nu ein varchar oder wieder ein Integer mache, ist mir überlassen, d.h. egal...hoffe ich habe nix vergessen...

Geschrieben

Hi,

ich hatte mal ein ähnliches Problem. Es musste in einer Spalte alles auf gleiche LEN gebracht werden. d.h. führende Nullen rein (war ne Art Postleitzahlenproblem).

1. Funktion schreiben, die die Längendifferenz bildet:

etwa so:

Public Function min_max(cn As ADODB.Connection, Tabelle As String, Spalte As String) As Integer

'Gibt die die Differenz zwischen der maximalen und minimalen vorkommenden Laenge der Wert

'einer Spalte zurück

Dim rs As New ADODB.Recordset

Dim sql_string As String

Dim maximum As Integer

Dim minimum As Integer

rs.ActiveConnection = cn

sql_string = "SELECT MAX(LEN(" & Spalte & ")) as Laenge FROM " & Tabelle

rs.Open sql_string

rs.MoveFirst

maximum = rs!Laenge

rs.Close

sql_string = "SELECT MIN(LEN(" & Spalte & ")) as Laenge from " & Tabelle

rs.Open sql_string

rs.MoveFirst

minimum = rs!Laenge

min_max = maximum - minimum

rs.Close

Set rs = Nothing

End Function

Im Hauptcode prüfen:

wenn min_max < 0 dann schwerer Fehler ;-|

wenn min_max = 0 dann nichts zu tun, alles gleich lang

min_max = 1 dann:

If differenz = 1 Then

maximum = max_Feld(cn, cbo_Tabelle.Text, Spalte)

sql_string = "UPDATE " & cbo_Tabelle.Text & " SET [" & Spalte & "] = '0'+[" & Spalte & "] WHERE (((LEN([" & Spalte & "]))<" & maximum & "))"

cn.Execute sql_string

cn.Close

MsgBox ("Die Tabelle wurde aktualisiert!")

Exit Sub

End If

min_max > 1: damals trat das nie auf und ich brauchte es auch nicht. Sicherheitshalber habe ich den Code mal "anprogrammiert", ob dieser auch genauso geht, wurde nie richtig getestet. Gedankenansatz:

If differenz > 1 Then

'MsgBox ("Noch nicht implementiert! Der Längenunterschied ist größer als 1!")

'Der einfachste Weg wird wohl sein, solange Nullen anfügen, bis die Differenz eben 0 ist

While differenz > 0

maximum = max_Feld(cn, cbo_Tabelle.Text, Spalte)

sql_string = "UPDATE " & cbo_Tabelle.Text & " SET [" & Spalte & "] = '0'+[" & Spalte & "] WHERE (((LEN([" & Spalte & "]))<" & maximum & "))"

cn.Execute sql_string

differenz = min_max(cn, cbo_Tabelle.Text, Spalte)

Wend

cn.Close

MsgBox ("Die Tabelle wurde aktualisiert!")

Exit Sub

End If

Hier wird noch eine Funktion max_Feld benutzt:

Public Function max_Feld(cn As ADODB.Connection, Tabelle As String, Spalte As String) As Integer

' Ermittelt die maximale Laenge vorkommender Werte einer Spalte und gibt dies als Wert

' zurück

Dim rs As New ADODB.Recordset

Dim sql_string As String

Dim maximum As Integer

rs.ActiveConnection = cn

sql_string = "SELECT MAX(LEN(" & Spalte & ")) as Laenge FROM " & Tabelle

rs.Open sql_string

rs.MoveFirst

maximum = rs!Laenge

max_Feld = maximum

rs.Close

Set rs = Nothing

End Function

cn ist immer eine Connection,

cbo_Tabelle.Text war hier immer ein Tabellenname, Spalte ist selbstredend.

Ich denke die SQL-Statements sind die wichtigen Methoden für Dich.

So nun aber Schluß mit Codebeispielen hier. Fragen per EMail am besten. Sollte nur eine Anregung sein

Grüße

Buell

Geschrieben

Danke erstmal für deine Anregungen und deine Mühen, aber leider hilft mir das nicht weiter, da ich die Orginalspalten nicht ändern möchte (UPDATE), sondern einfach nur auslesen (SELECT) will. NUR bei diesem einen Select soll er mir bei einstelligen zahlen eine führende Null davor setzen.

Und zur deutlichkeit, die beiden spalten, die ich auslesen will, fliessen in eine Neue Spalte in einer anderen Tabelle mit einem INSERT (schon fertig und funzt), das sieht momentan NOCH so aus:

INSERT INTO NEUETABELLE(NEUESPALTE)

VALUES

convert(varchar(6),b.PLAZIERUNGSNR)+convert(varchar(2),z.BLATTNR)

...

Also die Abfrage ist noch länger aber das oben, ist der wichtige Teil

Geschrieben

Habe es mit Hilfe doch noch geschafft, falls es jemanden interessiert hier die Syntax:

select

CASE

WHEN Len(convert(varchar(2), col1)) = 1 THEN Convert(char(1), 0)+Convert(char(1), col1)

ELSE

Convert( varchar(2),col1)

END

from table1

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...