【问题标题】:Coldfusion MYSQL Date Query Parameter not returning resultsColdfusion MYSQL日期查询参数不返回结果
【发布时间】: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


【解决方案1】:

尝试改用cfsqltype="cf_sql_date",因为“cf_sql_datetime”不是有效选项。请参阅help docs for cfqueryparam

【讨论】:

  • cf_sql_datetime 没有记录,但它可以工作 - 可能取决于使用的特定 JDBC 驱动程序或其他东西。
  • 不,这样做肯定会失败,因为我的代码中任何存在的“foo”都会自动抛出 DullExampleVariableName 异常。 :P
  • 哈哈。好的,cf_sql_charcoalDateThymeInfusedBriquette 怎么样?否则称为更平凡的cf_sql_char ;-)
  • @LauraHansen - 不,它与日期无关。 cfsqltypes 基于jdbc java.sql.Types 并且没有像cf_sql_datetime 这样的类型。用于传递日期和时间的 jdbc 类型是 TIMESTAMP。当 CF 看到“cf_sql_datetime”时,它不知道这是什么意思,而不是抛出错误,而是简单地替换为cf_sql_char
  • (cont'd) 所以当你使用它时,你很可能会传递一个string。虽然您的数据库可能能够将该字符串隐式转换为正确的类型,但......这并不意味着“cf_sql_datetime”实际上是一个有效的 cfsqltype。也就是说 - 您的列的实际数据类型是什么:date, datetime, ...?