J'essaie de récupérer des enregistrements qui tombent dans une année et un mois spécifiques à partir d'un ensemble complet d'enregistrements récupérés pour un utilisateur particulier. Tout d'abord, le champ en question itemdate est MySql type Datetime (par exemple, 2016-08-15 20:00:25). Il y a 4 lignes d'enregistrements pour un utilisateur:Coldfusion Requête MySQL dans une requête
2016-08-15 20:00:25
2015-06-01 20:25:05
2016-08-15 20:26:00
2016-08-15 23:30:35
Ces enregistrements pour un utilisateur particulier sont récupérés par:
<cfquery datasource="userdatbase"name="reportlist">
select itemid, itemdate, itemvalue
from itemlib
where userid = '#currentuserid#'
</cfquery>
L'année en cours et mois est déterminé par:
<cfset thisyear = #Year(Now())#>
<cfset thismonth = #Month(Now())#>
Maintenant, filtrez la requête d'origine et obtenez seulement ceux de l'année et du mois en cours:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where year(itemdate) = #thisyear#
and month(itemdate) = #thismonth#
</cfquery>
Je reçois l'erreur suivante:
Erreur lors de l'exécution de la requête de base de données.
Erreur de syntaxe Query Of Queries. . Rencontrés « année expression conditionnelle incorrecte, prévue l'un des [comme | null | entre | en | comparaison] condition,
J'ai essayé de le faire à la place:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where #year(reportlist.itemdate)# = #thisyear#
and #month(reportlist.itemdate)# = #thismonth#
</cfquery>
qui va se débarrasser de l'erreur Cependant, j'ai obtenu toutes les 4 rangées d'enregistrements dans le détail requête au lieu du attendu 3. Je ne m'attends pas à ce que l'enregistrement 2015-06-01 20:25:05 soit sélectionné, mais il le fait. Je me gratte la tête dessus, toute aide est appréciée Merci d'avance
êtes-vous sûr que les fonctions mois/année sont pris en charge si le type de connexion/pilote que vous utilisez? Mois/année semble être pris en charge par MySQL, donc je ne pense pas que le moteur a du mal à analyser la requête .. https://dev.mysql.com/doc/refman/5.5/fr/date-and-time-functions .html # function_month – xQbert
* Cependant, j'ai obtenu tous les 4 lignes * Parce que la requête SQL ne fait pas ce que vous pensez qu'il est ...Vous faites une comparaison de deux valeurs littérales, comme 'WHERE 1 = 1'. Il sera toujours vrai (ou faux) pour chaque ligne de la requête. – Leigh
Qu'advient-il de votre page si vous mettez une plage de dates dans la requête de base de données d'origine? –