【发布时间】:2026-01-12 03:15:01
【问题描述】:
我刚刚遇到了我认为一定是冷融合错误。
我有一个问题:
<cfquery name="qryTest" datasource="#This.ds#">
SELECT *
FROM MyLovelyTable
WHERE 1=1
AND phoneNumber = <cfqueryparam cfsqltype="cf_sql_bigint" value="#variables.phoneNumber#">
AND callTime between <cfqueryparam cfsqltype="cf_sql_date" value="#variables.startDate#"> AND <cfqueryparam cfsqltype="cf_sql_date" value="#variables.endDate#">
ORDER BY phoneID
</cfquery>
问题是,如果我通过第二个日期变量,则不会返回任何内容。如果我将查询前缀 SQL 和参数复制出来并直接查询数据库,则返回结果。只是当它通过CF时它不起作用。 如果我删除第二个日期参数它工作正常。如果我将第二个日期参数转换为字符串,它将起作用。
我尝试将第二个参数的值换成 now() 也不起作用。
据我所知,问题在于第二个日期参数是日期类型。
我是否在做任何我不知道的明显错误?
startDate 和 endDate 变量是coldfusion dateTime 对象。 CallTime 是 MariaDB 中的 dateTime 列。
【问题讨论】:
-
如下所述,cf_sql_datetime 不是有效类型。有效的日期/时间类型为:
cf_sql_date(仅限日期)和cf_sql_timestamp(日期和时间)。但是,正确的表达式取决于您要比较的值。callTime值只是日期还是包含日期和时间?如果它们只包含日期,那么切换到cf_sql_date就可以了。否则,您将需要不同的表达方式。 -
@Leigh 使用 cf_sql_timestamp 没有区别。使用 cf_sql_date 没有区别。正如我的问题中提到的,SQL 表达式很好,当我使用查询对象中显示的查询参数将它传输到数据库时它可以工作。日期对象也包含时间元素。
-
@Laura - 你只给了我们图片的一部分。我们需要查看 a) 变量的实际值:#startDate# 和 #endDate# b)
callTime值的样本和 c) 当您 "将其传输到数据库时的“好”结果 -
另外,根据列名,我们都假设
callTime的数据类型是日期时间。对吗? -
@Leigh 是的 callTime 是一个 dateTime 列。 A)正在被喂食冷融合日期时间对象。 B)来自数据库的示例 callTime 值:'2014-02-01 10:27:48' c)不明白你的意思。您熟悉 CF 中的查询响应吗?您可以将生成的 sql 复制出来并将参数替换为提供的参数。我已经做到了。查询的结果无关紧要。问题不在于 between 声明或我正在经历的实际日期。与 cfqueryparam 搭配起来很时髦
标签: mysql coldfusion coldfusion-9 cfquery cfqueryparam