【发布时间】:2013-01-23 19:39:20
【问题描述】:
我在 MySQL 表中有一个 timestamp 字段。我正在尝试使用以下 SQL 查询来查询表:
SELECT login_mode,count(login_mode) as total
FROM login_activity,ccac_registered_users
WHERE login_activity.student_id=ccac_registered_users.student_id
AND login_date >= STR_TO_DATE('01/16/2013','%m/%d/%Y')
AND login_date <= STR_TO_DATE('01/17/2013','%m/%d/%Y')
GROUP BY login_mode
当我直接在 Mysql 上运行查询时,查询工作正常,但在 Coldfusion 应用程序中无法正常工作。我难住了!生成日期的代码是:
login_date >= STR_TO_DATE(
'#DateFormat(CreateODBCDate(startDate),'mm/dd/yyyy')#'
, '%m/%d/%Y'
)
ColdFusion 的错误是这样的:
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在 '01/16/2013'',''%m/%d/%Y'') 和 login_date
这里有什么问题?
编辑
我刚刚转储了 CF 试图执行的 sql。
SELECT login_mode,count(login_mode) as total
FROM login_activity,ccac_registered_users
WHERE login_activity.student_id=ccac_registered_users.student_id
AND login_date >= STR_TO_DATE(''01/16/2013'',''%m/%d/%Y'')
AND login_date <= STR_TO_DATE(''01/17/2013'',''%m/%d/%Y'')
日期周围有额外的引号,它们导致了问题。如果我从代码中删除了我添加的额外内容,则不会添加任何内容。
【问题讨论】:
-
@Leigh 引用没有丢失。它位于括号的末尾。我将尝试仅使用 CreateODBCDate。 AFAIK,当我最后一次尝试时,它不能与 mysql 一起使用。
-
哦,是的,你是对的。我的眼睛错过了一句话。
-
您可能还想研究在查询中使用 BETWEEN。
-
取决于所需的结果和数据本身。如果其中任何一个包含“时间”部分(很可能),那么
between和原始查询将仅匹配 1 月 16 日午夜至 1 月 17 日午夜之间的 dated 记录。 17 日的所有其他 次 将被排除在外。要包含 17 日的所有时间,请使用WHERE col >= {startDateAtMidnight} AND col < {dayAfterEndDateAtMidnight}
标签: mysql sql coldfusion