2010-08-01 5 views
3

J'ai une table MySQL:JJ-MM-AAAA format de date et MySQL

dateStarted  varchar(45) 
dateEnded  varchar(45) 

Exemple:

alt text http://img8.imageshack.us/img8/765/dated.jpg

Il y a varchar (je ne sais pas pourquoi l'ingénieur logiciel précédent utilisé ceci). Puis-je effectuer une recherche entre deux dates dans MySQL avec le type varchar?

+0

Pouvez-vous rééditer et inclure des exemples de données du format de date utilisé par le programmeur? Je soupçonne la réponse sera oui, mais ce sera fiddly .. – James

+0

James, le format est dans le titre de la question: JJ-MM-AAAA. Mais oui, les échantillons seraient les meilleurs, donc nous pouvons essayer nos solutions sur son ensemble de données réel. – kander

+0

@James, j'ai réédité. – TheNone

Répondre

8

Non. Vous devez changer le format en un format approprié.

L'ingénieur logiciel précédent l'a utilisé pour cause d'ignorance. Vous devez corriger son erreur.

N'ayez pas peur du travail supplémentaire. En fait, cela fait partie du travail de chaque programmeur. Il n'y a pas de code dans le monde entier, ce qui est parfait pour toujours. L'amélioration constante du code est appelée refactoring et occupe une grande partie du temps de travail de chaque ingénieur logiciel.

+3

Ouais, prends un peu de peine maintenant et convertis-le. Vous aurez quelques problèmes de performance horribles entre les chaînes et les dates. – StuartLC

+0

Vous avez raison, mais DD-MM-YYYY peut-il être un format de date autorisé? – TheNone

+1

@phpExe pas dans mysql. format de date mysql est «AAAA-MM-DD» –

3
SELECT 
    * 
FROM test1 
    WHERE STR_TO_DATE(:date, '%d-%m-%Y') BETWEEN 
     STR_TO_DATE(dateStart,'%d-%m-%Y') AND 
     STR_TO_DATE(dateEnd,'%d-%m-%Y') 

Juste essayé ceci sur votre ensemble de données, et cela fonctionne AFAICT.

Mais vous devriez bien entendu tenir compte des conseils donnés par les autres ici, et essayer de corriger les erreurs de votre prédécesseur, si possible dans les limites de temps. Cela va devenir un problème à un moment donné, en raison de la quantité de casting en cours.

+0

Si je change le type de colonne, le formate DD-MM-YYYY n'est pas suppuré par mysql. Parce que le format de date peut-être en JJ-MM-AAAA. – TheNone

0

Vous devrez déterminer le format dans lequel se trouvent les deux champs. Sont-ils en secondes à partir de l'époque UNIX? Sont-ils le format YYYYMMDD? Une fois que vous avez fait cela, il serait assez facile de le convertir en une date et de les comparer.

+1

D'accord avec @Col. Shrapnel cependant, vous devriez prendre le temps de stocker les dates en mode natif. –