119 votes

MySQL compare la corde DATE avec la corde du champ DATETIME

J'ai une question: Est-il possible de sélectionner la base de données MySQL forme en comparant une chaîne DATE "2010-04-29" avec des chaînes qui sont stockées comme DATETIME (2010-04-29 10:00)?

J'ai un cueilleur de date qui filtre les données et je voudrais interroger la table par le champ DATETIME comme ceci:

et je voudrais obtenir la ligne qui a la valeur DATETIME de "2010-04-29 10:00".

Toutes les suggestions ? merci.

206voto

David Points 748

Utilisez ce qui suit :

Juste pour référence, j'ai une table de 2 millions d'enregistrement, j'ai couru une requête similaire. La réponse des voiles a pris 4,48 secondes, ce qui précède a pris 2,25 secondes.

Donc, si la table est BIG je suggère ce plutôt.

55voto

XL_ Points 99

Si vous voulez sélectionner toutes les lignes où la DATE partie d'une colonne DATETIME correspond à un certain littéral, vous ne pouvez pas le faire comme ceci:

WHERE startTime = '2010-04-29'

parce que MySQL ne peut pas comparer une DATE et DATETIME directement. Ce que MySQL n', elle s'étend de la DATE donnée littérale avec le temps "00:00:00'. Si votre état devient

WHERE startTime = '2010-04-29 00:00:00'

Certainement pas ce que vous voulez!

La condition est une gamme et par conséquent, il devrait être donné en gamme. Il y a plusieurs possibilités:

WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)

Il y a une infime possibilité pour le premier faux - lorsque votre colonne DATETIME utilise subsecond résolution et il est un rendez-vous à 23:59:59 + epsilon. En général, je suggère l'utilisation de la deuxième variante.

Les deux variantes peuvent utiliser un index sur startTime qui va devenir important lorsque le tableau se développe.

25voto

Salil Points 20300
<pre><code></code><p><pre><code></code></pre></pre>

1voto

Sarath Points 12
<pre><code></code><p><code></code>avant de comparer.</p></pre>

-6voto

Fletcher Moore Points 3650
<pre><code></code><p>Vous pouvez également utiliser des opérateurs de comparaison sur les dates MySQL si vous voulez trouver quelque chose après ou avant. C'est parce qu'ils sont écrits de telle manière (la plus grande valeur à la plus petite avec des zéros de premier plan) qu'une simple sorte de chaîne les triera correctement.</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X