sorting - 按年、月、日排序结果时参数太少错误
问题描述
我正在尝试按年、月、日对结果进行分组以进行输出。
2019
February
Day
我不确定我在这里做错了什么,并想知道这是否是 MS Access 问题。以下代码产生参数太少错误。
<cfquery name="nchklist" datasource="#fds#">
SELECT year(chkdate) AS Year, month(chkdate) AS month, day(chkdate) AS day, vcheck
FROM vchk
where vid = '#vid#' and final = 1
ORDER BY year, month, day
</cfquery>
<cfoutput query="nchklist" group="year">
<cfoutput group="month">
#monthAsString(month)#
<cfoutput group="day">
<a href="create_report.cfm?vcheck=#vcheck#">View</a> : DateFormat(chkdate, 'dddd - mmmm d, yyyy')#<br>
</cfoutput>
</cfoutput>
</cfoutput>
解决方案
更新:
我使用 Access 已经有好几年了,所以我的知识有点模糊,但我开始记得它对 ORDER BY 子句有限制。与真正的 DBMS 不同,它不够聪明,无法按列别名进行排序。我不知道这在最近的版本中是否发生了变化,但是......就像我之前提到的,你应该尝试按原始表达式排序 - 而不是别名:
ORDER BY year(chkdate), month(chkdate), day(chkdate)
顺便说一句,CF 并不是一个出色的 sql 调试工具。它与数据库间接通信,通常通过 JDBC 驱动程序。与使用标准数据库工具相比,该过程返回的一般错误消息通常要多得多。每当您遇到这样的神秘错误时,最好直接在数据库中运行 sql 查询,根据需要硬编码参数。这样做可能会给您一个不那么神秘的错误消息,或者至少表明 ORDER BY 子句是问题所在。
如评论中所述,该错误可能表示列名拼写错误。当保留字用作列名或别名时,也会发生这种情况。请注意,您的查询使用了名为Year
,Month
和Day
? 这些是Access 中的保留字。这可能是错误的原因。尝试将您的列别名更改为非保留字,例如TheYear
, TheMonth
, TheDay
。
假设 MS Access 支持按列别名排序,请尝试以下查询:
SELECT year(chkdate) AS TheYear
, month(chkdate) AS TheMonth
, day(chkdate) AS TheDay
, vcheck
FROM vchk
WHERE vid = <cfqueryparam value="#vid#" cfsqltype="cf_sql_varchar">
AND final = 1
ORDER BY TheYear, TheMonth, TheDay
注意:即使使用 MS Access,查询也应始终对所有输入参数使用 cfqueryparam。
推荐阅读
- sql - 位于两个日期之间的 SQL 总和
- javascript - Phaser:如何为 this.image.load 设置回退
- laravel - Vuejs 安装与否?
- javascript - 响应式导航栏(vanilla javascript)不起作用
- c# - 使用没有 VBA 的 OpenXML 库 VS2017 在 Office Excel 中自动插入自定义功能区
- python - Python:熊猫中的行到列
- angular - 删除参数时不会触发路由 paramMap
- android - 获取空值作为响应
- java - 对 ArrayList 进行排序时发生 Collections.sort() 错误
- vue.js - 如何在生成的 index.html 文件中加载 css 文件?