Comparer un datetime avec un date (sans l'heure)

Comparer un datetime avec un date (sans l'heure) - SQL/NoSQL - Programmation

Marsh Posté le 10-03-2006 à 11:16:29    

Bonjour à tous !
 
Voilà, j'ai un historique avec des datetime et je voudrais afficher toutes les actions de la journée, mais je ne vois pas comment faire :/
J'ai testé avec curdate(), mais ça ne fonctionne pas.
 
Voici ce que j'ai tenté :

Code :
  1. SELECT * FROM `action_historique` where `date`=curdate() and `idc`=12345678 //ne retourne rien
  2. SELECT * FROM `action_historique where `date` like "2006-03-10%" //fonctionne mais n'est vraiment pas optimal, c'est évident


 
Auriez-vous une solution à me donner ?


Message édité par nero27 le 10-03-2006 à 11:16:58
Reply

Marsh Posté le 10-03-2006 à 11:16:29   

Reply

Marsh Posté le 10-03-2006 à 11:35:07    

SGBD ?
 
Sous mysql tu peux spécifier un masque avec DATE_FORMAT(date,'%Y-%m-%d') par exemple
 
SELECT *
FROM `action_historique`
WHERE DATE_FORMAT( date, '%Y-%m-%d' ) = "2006-03-10"

Message cité 1 fois
Message édité par jeoff le 10-03-2006 à 11:38:31
Reply

Marsh Posté le 10-03-2006 à 11:41:17    

jeoff a écrit :

SGBD ?
 
Sous mysql tu peux spécifier un masque avec DATE_FORMAT(date,'%Y-%m-%d') par exemple
 
SELECT *
FROM `action_historique`
WHERE DATE_FORMAT( date, '%Y-%m-%d' ) = "2006-03-10"


C'est du MySQL, en effet, j'ai oublié de préciser :ange:  
 
Je pense que c'est exactement ce que je cherche, je vais tester ça de suite :jap:
 
Sinon, niveau ressources, c'est gourmand ou pas ?

Reply

Marsh Posté le 10-03-2006 à 11:47:28    

nero27 a écrit :


Sinon, niveau ressources, c'est gourmand ou pas ?


 
Je pense pas que ce soit pire que 'like', revient poster les résultats du bench like vs DATE_FORMAT histoire qu'on en profite :D

Reply

Marsh Posté le 10-03-2006 à 11:58:32    

Alors, je viens de tester et ça fonctionne : alors, avec le like, ça nous donne un joli lock de la table et avec ta solution, ça nous donne entre 3 et 6 secondes (mais le serveur est en surcharge).

Reply

Marsh Posté le 10-03-2006 à 15:39:13    

disons que la fonction de CAST de "float" vers "int" en mysql soit "cint()"
 
alors essaie :
 
where cint(date) = cint(curdate())
 
après tout, une date, c'est simplement un float pour un PC, dont la partie entière représente la date, et la fraction, l'heure. la plupart des langages et SGBD acceptent de faire le goret avec des cast dessus. et clairement, tu ne trouveras rien de plus performant que de faire un cast d'un float vers un int pour comparer des dates ;)


Message édité par Arjuna le 10-03-2006 à 15:39:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed