FIXED - c'est ce que j'ai maintenant - Écrit en ASP
If Session("dateRange") = "Today" Then
fromDate = Date()
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated = '"&fromDate&"' "
ElseIf Session("dateRange") = "Yesterday" Then
fromDate = DateAdd("d",-1,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated = '"&fromDate&"' "
ElseIf Session("dateRange") = "1 Week" Then
fromDate = DateAdd("d",-7,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "1 Month" Then
fromDate = DateAdd("m",-1,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "3 Months" Then
fromDate = DateAdd("m",-3,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "6 Months" Then
fromDate = DateAdd("m",-6,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "1 Year" Then
fromDate = DateAdd("yyyy",-1,Date())
fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
End If
Question originale:
C'est une question simple, mais pour une raison quelconque, je n'arrive pas à faire en sorte que cela fonctionne.
J'ai une boîte de recherche, à côté de celle-ci, un menu de sélection de plage de dates permettant à l'utilisateur de rechercher des photos au cours du dernier mois, des 6 derniers mois ou des 12 derniers mois.
Ce que j'ai n'a pas d'erreur mais il ne produit aucun résultat alors qu'il devrait le faire, c'est ça:
WHERE dateCreated BETWEEN "&DateAdd("m",-6,Date())&" AND "&Date()&"
La sortie SQL produit ceci:
dateCreated BETWEEN 18/03/2011 AND 18/09/2011 ORDER BY dateCreated DESC
Le champ 'dateCreated' de la base de données est défini sur (Date INDEX).
Quelqu'un peut-il voir ce qui ne va pas?
Les dates dans votre SQL résultant doivent être entre guillemets simples. Essayez d'encercler les parties dynamiques de votre requête avec des guillemets. Quelque chose comme ça:
WHERE dateCreated BETWEEN '"&DateAdd("m",-6,Date())&"' AND '"&Date()&"'
qui, je suppose, produirait ce SQL:
dateCreated BETWEEN '18/03/2011' AND '18/09/2011' ORDER BY dateCreated DESC
En outre, voyez si vous pouvez trouver un moyen de formater les dates au format plus habituel de MySQL yyyy-mm-dd
. Comme ça:
dateCreated BETWEEN '2011-03-18' AND '2011-09-18' ORDER BY dateCreated DESC
Si vous regardez spécifiquement en arrière à partir de "maintenant", pourquoi ne pas faire
where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 1 MONTH )
where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 6 MONTH )
where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 12 MONTH )
Pas besoin d'une "Plage", insérez simplement la plage de mois que vous souhaitez autoriser ...
%d-%m-%Y
n'est pas un format de date approprié et les valeurs de date dans MySQL doivent toujours être citées comme des chaînes et un format ISO 8601 ('%Y-%m-%d'
). 18/03/2011
sera interprété comme étant simplement 18
divisé par 03
et 2011
, ce qui donne environ 0.002…
.
C'est-à-dire que votre code SQL devrait plutôt être comme le formulaire suivant:
dateCreated BETWEEN '2011-03-18' AND '2011-09-18' ORDER BY dateCreated DESC
Vous ne savez pas quelle technologie vous utilisez pour DateAdd()
, mais votre format de date final est erroné en plus du fait que vos valeurs de date ne sont pas délimitées par des guillemets simples.
MySQL compare les dates en tant que 2011-03-18
et non 18/03/2011
.
Une note que vous pouvez faire cela dans MySQL avec ses Fonctions Date/Heure . Bien que puisse empêcher la mise en cache de la requête.
Si ces chaînes ne sont pas entre guillemets, je pense que vous ne faites que la division, puis que vous comparez les dates entre une très petite période.