SQL String Suche - aber wie richtig?

Registrierer

Erfahrenes Mitglied
Hallo Wissende,

ich möchte in einem Textfeld nach dem Kennzeichen suchen, es kommt in verschiedenen Schreibweisen vor:
ABC-D123
ABC- D123
ABC -D123
ABC - D123
ABC - D 123

wenn ich nun den Suchbegriff ABC - D 123 eingebe, möchte ich auch ABC-D123 finden und wenn ich ABC-D123 suche möchte ich auch ABC - D 123 finden.

Bisher verwende ich
PHP:
$abfrage  .= " WHERE kfz.AMTKZ LIKE '".mysql_real_escape_string($_POST['AMTKZ'])."%'";

Das funktioniert natürlich nicht.

http://www.tutorials.de/sql-tutorials/178089-texte-suchen-und-finden-sql.html beschreibt zwar sehr schön die einzelnen Funktionen aber nicht meinen Anwendungsfall, oder ich hab was übersehen.

Wer hätte einen Tipp für mich?
Danke
 
Am einfachsten wäre es natürlich, das Kennzeichen nur in einer Schreibweise abzuspeichern.

Anonsten::

PHP:
<?php
$kennzeichen = str_split('  A B   C-D123');
$regex = '';
foreach($kennzeichen as $k){
  if( $k != ' ' )
    $regex .= $k.' ?';
}
$sql = 'SELECT * FROM `table` WHERE `feld` REGEXP "'.$regex.'"';
var_dump($sql);
 
Hallo Registrierer,

probier es mal so:
PHP:
$abfrage  .= " WHERE REPLACE(kfz.AMTKZ, ' ', '') = '".mysql_real_escape_string(str_replace(' ', '', $_POST['AMTKZ']))."'";
Am besten wäre es natürlich, wenn du die Kennzeichen schon derart kanonisch in der Datenbank ablegst.

Grüße,
Matthias
 
Am einfachsten wäre es natürlich, das Kennzeichen nur in einer Schreibweise abzuspeichern.

Die Daten stammen aus einer sehr alten DOS-DB und dort wurde das Kennzeichen nach Gutdünken eingetragen, teilweise sogar mit Kleinbuchstaben. Jetzt, da das gesamte Werkstattprogramm umgeschrieben ist, kann ich sowas abfangen.

Vielen dank für die Fertiglösung ;-)
 
Ich würde allerdings weder meine noch Matthias (dessen Lösung warscheinlich noch perfomanter ist) nutzen, sondern mir einmal die Zeit nehmen und ein Script schreiben, was die Kennzeichen genormt einträgt, was für die weitere Verarbeitung einfacher ist.
 
Ich würde allerdings weder meine noch Matthias (dessen Lösung warscheinlich noch perfomanter ist) nutzen, sondern mir einmal die Zeit nehmen und ein Script schreiben, was die Kennzeichen genormt einträgt, was für die weitere Verarbeitung einfacher ist.

Du hast ja Recht, aber da hab ich ja schon.
Ich hab ein Werkstattrechnungsprogramm auf DOS Basis umgeschrieben und muss natürlich die alten Datensätze verwenden, da fällt Handarbeit aus.
Ein und dasselbe Kennzeichen kann in allen möglichen Formen vorliegen, mit und ohne Leerzeichen oder Bindestrich usw.
Es folgt also keiner Regel, da alles willkürlich eingetragen wurde.
 
Ich würde trotzdem mit einem UPDATE alles umschreiben
SQL:
UPDATE kfz
SET kfz.AMTKZ = UPPER(REPLACE(kfz.AMTKZ, ' ', ''))
Nachher hast du eine saubere Tabelle mit der Kennzeichenformatierung 'ABC-D123'
 
Zuletzt bearbeitet von einem Moderator:
Zurück