2016-07-09 7 views
0

Ich habe eine Abfrage, die ich Benutzer nach einem Geburtsdatum in einer Datenbank suchen lassen möchte. Anstatt jedoch separate Felder für MM, DD, YYYY zu haben, möchte ich, dass sie es als Zeichenfolge eingeben können. Dann verwende ich die Funktion STR_TO_DATE in MySQL, um die Geburtsdaten nachzuschlagen und eine Liste von Personen mit diesem Geburtstag zurückzuliefern.MySQL-Syntax für Datumssuche in einem Text-Eingabefeld

Da die Eingabe nur ein Textfeld ist, können mehrere Optionen eingegeben werden. Zum Beispiel hier sind nur einige der Arten von Möglichkeiten, die Menschen bei der Suche geben werden:

Search MM-DD-YYYY: 
Option 1: 09-22-1958 
Option 2: 09/22/1958 
Option 3: 9/22/1958 
Option 4: 9/22/58 

Die vierte Option, 9/22/58, ist korrekte Ergebnisse in einigen Fällen in anderen aber nicht zurück. Manchmal sagt es keine Ergebnisse .. aber manchmal mit dem gleichen Format, aber ein anderes Datum, die Ergebnisse werden kommen ... obwohl die Daten alle in der Datenbank korrekt sind. Ich denke, das hat damit zu tun, dass es vor dem Monat 9 keine nachlaufende "0" gibt, kombiniert mit keiner "19" vor dem Jahr "58".

Allerdings kann ich nicht herausfinden, wie die Abfrage-Suche in der Lage sein, alle Optionen nachschlagen zu können. Es funktioniert auch in einigen Fällen, wie am 31.8.83, aber nicht in anderen Fällen wie am 22.9.58. Hier

ist die Abfrage:

SELECT * FROM database 
     WHERE 
     Birth_Date=STR_TO_DATE(REPLACE('$search', '/', '-'), '%m-%d-%Y') or 
     Birth_Date=STR_TO_DATE(REPLACE('$search', '-', '/'), '%m/%d/%Y')" 

Es scheint, dass ich hier etwas fehle. Ich habe die Funktion STR_TO_DATE hinzugefügt, die REPLACE-Funktion, um auf das/und - ... zu achten, aber was muss ich noch haben, um sicherzustellen, dass es im Falle von 9/22/58 und anderen Fällen funktioniert?

+0

besser transformieren Sie das Datum in der Anwendung und senden Sie eine ISO-Datenfolge an mysql. – Sirko

+0

das Problem ist, dass der Benutzer kann auch durch andere Felder wie Name, Adresse, etc .. alle im selben Eingabefeld suchen. Ich nehme an, ich kann ein anderes Feld trennen, hoffe aber, dass ich eine Lösung finden kann, um nur ein Suchfeld zu verwenden. –

+0

imo diese Konvertierung in der Datenbank ist eine wirklich schlechte Idee und uncussary. Sie können auch in der Anwendung nach einer gültigen Datumszeichenfolge suchen und entsprechend reagieren. – Sirko

Antwort

0

Ein anderer Ansatz wird sein, zuerst das Datum im richtigen Format über PHP konvertieren und dann das Ergebnis abfragen.

$date = "9/22/58"; //user input 

$search = date('d-m-Y', strtotime($date)); 
+0

, aber das Eingabefeld akzeptiert auch andere Informationen wie Name, Adresse, etc .. also nicht sicher, das würde funktionieren. –

+0

Sie können prüfen, ob der eingegebene Text ein gültiges Datum ist, ja, dann fügen Sie Birth_Date ein, um die Where-Klausel zu überprüfen. –

Verwandte Themen