Durone Geschrieben 2. Dezember 2002 Geschrieben 2. Dezember 2002 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 Zitieren
Wolle Geschrieben 2. Dezember 2002 Geschrieben 2. Dezember 2002 *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?? Zitieren
Durone Geschrieben 2. Dezember 2002 Autor Geschrieben 2. Dezember 2002 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... Zitieren
robotto7831a Geschrieben 3. Dezember 2002 Geschrieben 3. Dezember 2002 Hallo, der Access Befehl format könnte Dir vielleicht helfen. Frank Zitieren
Durone Geschrieben 3. Dezember 2002 Autor Geschrieben 3. Dezember 2002 Nein leider nicht, weil ich das ganze per SQL befehl an den DB-Server schicken will, und der schlcukt kein Format Zitieren
Buell Geschrieben 3. Dezember 2002 Geschrieben 3. Dezember 2002 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 Zitieren
Durone Geschrieben 3. Dezember 2002 Autor Geschrieben 3. Dezember 2002 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 Zitieren
Durone Geschrieben 3. Dezember 2002 Autor Geschrieben 3. Dezember 2002 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 Zitieren
gugelhupf Geschrieben 5. Dezember 2002 Geschrieben 5. Dezember 2002 Warum denn so kompliziert ???? Auf nem SQL-Server ne führende 0 hinzufügen: SELECT 0+[spaltenname] FROM blablabla Zitieren
Empfohlene Beiträge
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.