10
votes

mysql - recherche horodatage par heure de journée

J'ai une colonne nommée updateTime code> c'est un horodatage code>. Ainsi, par exemple, une valeur de la vie moyenne pourrait être la suivante: 2011-02-01 09:00:51 Code>. Je veux pouvoir rechercher et retourner tous les résultats pour une heure donnée de la journée quelle que soit la date.

Par exemple, si j'ai cherché la colonne de valeurs entre 09:00:00 et 09:59:99 code> il retournerait: p>

2011-02-01 09:00:51
2011-01-31 09:20:51
2011-01-11 09:55:44
etc....


0 commentaires

5 Réponses :


2
votes

Essayez avec heure () code> .

SELECT * FROM table WHERE HOUR(updatetime) = 9;


0 commentaires

19
votes

Vous pouvez utiliser le heure ( ) fonction: xxx

hélas, la performance de cette requête sera horrible , dès que vous passez plus de quelques milliers de lignes - les fonctions ne sont pas indexables Donc, il y aura une balayage de table complète chaque fois que cette requête fonctionne.

Qu'est-ce que nous avons fait dans une situation similaire: nous avons créé une autre colonne updateTime_hour , indexée et peuplé sur Insérer (et mis à jour sur la mise à jour); Ensuite, la requête devient rapide: xxx

Oui, nous avons dénormalisé les données, et c'est un peu plus de ménage, mais je n'ai pas encore trouvé une solution plus rapide. (Nous avons considéré et mesuré insert et mettons à jour les déclencheurs pour renseigner le updateTimetime_hour à partir de updateTime , mais décidé contre des performances; voir s'ils seraient utiles pour vous.)


3 commentaires

Bon point sur la performance. Je peux implémenter une colonne d'une heure indexée sur l'insertion assez facile, mais toutes les idées sur la manière de passer par mes précédentes lignes 60K et de mettre à jour les données de colonne 'updatetime_hour'?


@ user410341: pendant les heures de pointe, et très soigneusement;) Mettez à jour votre carte de mise à jour UpdateTime_hour = heure (UpdateTime); <- Ceci prendra un certain temps


Merci, je viens de poster comme une nouvelle question: Stackoverflow.com/questions/4866056/...



2
votes
SELECT * FROM table WHERE hour('updatetime') = 9;
Would return 9am..

0 commentaires

0
votes

Possibilité: Sélectionnez * à partir de 'Table' où heure (UpdateTime) = '09';


0 commentaires

0
votes

Ces réponses ne fonctionnent pas, c'est ce qui a fonctionné pour moi uniquement

SELECT hour(FROM_UNIXTIME(`updatetime`)) AS date_formatted FROM `table` where hour(FROM_UNIXTIME(`updatetime`))='9'


0 commentaires