Я пытаюсь получить записи, выпадающие на определенный год и месяц, из полного набора записей для конкретного пользователя. Во-первых, рассматриваемое поле itemdate имеет тип MySql Datetime (например, 2016-08-15 20:00:25). Для пользователя существует 4 строки записей:
2016-08-15 20:00:25
2015-06-01 20:25:05
2016-08-15 20:26:00
2016-08-15 23:30:35
Эти записи для конкретного пользователя извлекаются:
<cfquery datasource="userdatbase"name="reportlist">
select itemid, itemdate, itemvalue
from itemlib
where userid = '#currentuserid#'
</cfquery>
Текущий год и месяц определяются:
<cfset thisyear = #Year(Now())#>
<cfset thismonth = #Month(Now())#>
Теперь отфильтруйте исходный запрос и получите только те, которые относятся к текущему году и месяцу:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where year(itemdate) = #thisyear#
and month(itemdate) = #thismonth#
</cfquery>
Я получаю следующую ошибку:
Ошибка выполнения запроса к базе данных.
Синтаксическая ошибка Query Of Queries. Обнаружен год. Неверное условное выражение. Ожидалось одно из условий [like|null|between|in|comparison],
Вместо этого я попытался сделать это:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where #year(reportlist.itemdate)# = #thisyear#
and #month(reportlist.itemdate)# = #thismonth#
</cfquery>
который избавит от ошибки. Однако я получил все 4 строки записей в запросе detail вместо ожидаемых 3. Я не ожидаю, что запись 2015-06-01 20:25:05 будет быть избранным, но это так. Я ломаю голову над этим. Любая помощь приветствуется. Заранее спасибо.
WHERE 1 = 1
. Он всегда будет истинным (или ложным) для каждой строки в запросе. - person Leigh   schedule 17.08.2016select count(*)
. Это все неточная наука. - person Dan Bracuk   schedule 17.08.2016