SQL IF-Abfrage innerhalb eines INSERT

Schnipp

Lt. Commander
Registriert
Feb. 2004
Beiträge
1.141
Tach zusammen,

ich habe hier folgende Konstellation: ich bekomme in regelmäßigen ein Excel-Dokument, aus welchem ich die Daten auslesen und in eine SQL-Tabelle packen muss. Soweit auch kein Problem.

Nun kann es aber vorkommen, dass ein Wort unterschiedlich geschrieben ist, z.B. BUERO, B?RO oder auch BÜRO. Ich möchte nun sicher stellen, dass der Eintrag dazu in der Datenbank bei dem entsprechenden Datensatz immer nur BUERO lautet.

Nur wie kann ich das innerhalb der INSERT-Funktion realisieren?

Der Wert, der ausgelesen wird, lautet so:

Code:
UCase(rs.Fields("xyz").Value)

Gruß Schnipp
 
Lass den Programmcode vorher einfach die Intelligenz haben. SQL Statements sollten möglichst einfach sein, damit die Belastung auf den DB Server gering bleibt.

So oder so ähnlich gehts:
Code:
Private Function norm_str(var As Variant) As String
Dim tmp_string As String
  If IsObject(var) Then
    tmp_string = var.Value
  Else
    tmp_string = var
  End If
  tmp_string = Replace(tmp_string, "B?ro", "Buero")
  tmp_string = Replace(tmp_string, "Bxyzro", "Buero")
  tmp_string = Replace(tmp_string, "Büro", "Buero")
  norm_str = UCase(tmp_string)
End Function
 
Wäre es nicht sinnvoller einfach alle Umlaute durch entsprechenden Ersatz auszutauschen?
Außerdem würde der Code für "BÜRO" als Eingang scheitern, schließlich wird "Büro" gesucht.

Deshalb zuerst in Großbuchstaben machen und dann erst ersetzen.
 
Hast Recht, vorher in Großbuchstaben umwandeln ist besser, bei mir die diese Funktion in einem Kontext benutzt, der nur Kleinbuchstaben zulässt. Außerdem habe ich meine Umlaute entfernt und durch die verschiedenen "Büro"'s ersetzt.

Insofern lautet es besser:
Code:
Private Function norm_str(var As Variant) As String
  If IsObject(var) Then
    norm_str = var.Value
  Else
    norm_str = var
  End If
  norm_str = UCase(norm_str)
  norm_str = Replace(norm_str, "Ü", "UE")
  norm_str = Replace(norm_str, "Ä", "AE")
  norm_str = Replace(norm_str, "Ö", "OE")
End Function
 
Ich will nicht den Arsch geben, aber eigentlich sollte ein Datenbanksystem so entwickelt sein, dass es solche Probleme eben nicht gibt und sie höchstens kosmetischer Natur sind.
Warum muss die Schreibweise denn einheitlich mit Umlaut sein? An der Datenbank liegt das doch wohl nicht oder?
 
Stimmt schon, Groß-Kleinschreibung sollte an sich keine Rolle spielen.
Aber wegen Umlauten -> keine Ahnung.

Gegenfrage:
Warum soll für die Datenbank büro und buero das selbe sein?
 
@muckelzwerg: Ich will auch nicht den Arsch geben, aber das ist absoluter Quatsch!

Natürlich kann die DB damit umgehen, aber wer will schon zig verschiedene Versionen von Büro oder als Beispiel Straße in der DB stehen haben? Wer Freitextfelder in eine DB überträgt und nachher noch mit ihnen arbeiten will, sollte tunlichst die Eingaben kontrollieren.

Stell dir mal vor, die hast ein Verzeichnis der Straßen einer Stadt, willst du jetzt wenn ein User nach einer Straße sucht nach: Straße, Strasse, Str., Str, straße, strasse, str., str usw. suchen? Und diese Umwandlung jedes Mal machen? Nein, du machst sie genau einmal: beim Eintragen.
 
Ach ja ich bin von Spalten ausgegangen, aber es geht hier ja sogar um die Werte...
Klar könnte man die Datenbank die Arbeit machen lassen, aber wozu?

Sieht doch super aus wenn ich nach BÜRO suche und zwar alles richtige finde, aber in den Einträgen dann BÜRO immer anders da steht... ich würde es beim Eintragen machen.


Außerdem könnte das den Nebeneffekt haben, dass man dann bei BÜRO evtl dann auch BAROMETER finden könnte wenn man es nicht einfach sauber beim Eintragen macht...
 
Zuletzt bearbeitet:
Chaos, da hat 1668mib schon genau die richtige Frage gestellt. Wenn sämtliche Umlaute und andere falsch konvertierte Schreibweisen ("B?ro") alle in die gleiche Form übersetzt werden, dann gehen Informationen verloren. Solche Fehler sollten an anderer Stelle behoben werden. Wenn z.B. nicht alle beteiligte Software UTF-8 kann, dann muss man an der richtigen Stelle konvertieren. Die Daten sollten so gespeichert werden, wie sie eingegeben werden und in dieser Form auch wieder zu finden sein.
Wenn man keine unterschiedliche Worte in der Datenbank haben will, dann schreibt man sie nicht rein.
Andernfalls kann man nämlich keine unterschiedlichen Worte mehr haben, wenn man es eben doch mal will.
Es ist ja z.B. auch üblich bei Suchabfragen aus Umlauten auch die Doppelvokale zu machen und nach beidem zu suchen.
Irgendwelche Transformationen direkt beim Einfügen zu machen, ist normalerweise keine gute Idee.
Wenn es nur um Excelzellen geht, dann reicht sogar die Autokorrektur oder ein einfaches Suchen und Ersetzen.
Aber auch das ist eigentlich nicht das Wahre. Was wenn ein neues Wort mit unterschiedlicher Schreibweise dazukommt? Bastelt man dann jedesmal eine Erweiterung für den Einfügemechanismus der Datenbank?
Solche Geschichten sollte man möglichst nicht der Datenbank aufzwingen, weil man dann sehr leicht wieder andere Probleme bekommt.
 
Zurück
Oben