Question

Je souhaite sélectionner des enregistrements entre deux dates - un startDate et endDate (ils sont au format date / heure en sql).J'ai la requête SQL suivante mais cela ne fonctionne pas, quelqu'un pourrait-il me dire ce que je fais mal?

"SELECT * 
FROM house 
WHERE startDate >= '2012/02/22 00:00:00' AND endDate <= '2012-02-25 00:00:00'"
Était-ce utile?

La solution

Je suggérerais de convertir les dates en date / heure et de les comparer ainsi que de garder la date standard et cohérente.Quelque chose comme:

"SELECT * 
FROM house 
WHERE DATE(startDate) >= DATE('2012-02-22 00:00:00') 
  AND DATE(endDate) <= DATE('2012-02-25 00:00:00')"

REMARQUE: j'ai supposé que votre startDate et endDate étaient du même format que les chaînes que vous avez fournies.

Autres conseils

Voulez-vous que toutes les lignes dont startDate soit '2012-02-22' ou version ultérieure et endDate soit '2012-02-22' ou précédent?Ensuite, utilisez ceci:

SELECT * 
FROM house 
WHERE startDate >= '2012-02-22' 
  AND endDate < '2012-02-26'           --- notice the `<`, not `<=`
                                       --- and the `day+1`

Lorsque vous utilisez des dates avec des produits SQL, mieux vaut utiliser ce format dans les requêtes et les instructions: '20120222' ou ceci (que je trouve plus facile à lire: '2012-02-22'.

L'utilisation de barres obliques comme '2012/02/22' ou tout autre ordre que Year-Month-Day n'est pas recommandée.

Il n'est pas nécessaire d'inclure la partie horaire.'2012-02-22 00:00:00' est le même que '2012-02-22'.

L'utilisation de endDate <= '2012-02-25 00:00:00' signifie que toute ligne avec la date du 25 février 2012 mais après minuit ('00:00:00') ne correspondra pas à la condition.Si vous voulez aussi ces lignes, utilisez plutôt endDate < '2012-02-26'.

Vous pouvez utiliser DATE(endDate) <= DATE('2012-02-25 00:00:00') ou DATE(endDate) <= '2012-02-25' mais ces conditions sont "non sargables", donc vos requêtes ne pourront pas utiliser un index sur endDate.

Il existe le STR_TO_DATE fonction dans MySql qui prend le même masque de format que date_format .

start_date >= str_to_date('2012/02/22 00:00:00','%Y/%m/%d %h:%i:%s)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top