查询日期比较的ColdFusion查询

查询日期比较的ColdFusion查询,coldfusion,Coldfusion,我使用cfspreadsheet创建了一个查询,该查询有一个名为“Actiondate”的日期列,使用isDate()循环查询显示它是一个日期列,但在该查询的查询中,它被视为一个字符串。因此,当我在where子句中应用日期过滤器时,它无法正确进行比较: <cfquery ... > SELECT * FROM arguments.q WHERE 1=1 <cfif isDate(arguments.dateFrom)> AND actiondate >= &

我使用
cfspreadsheet
创建了一个查询,该查询有一个名为“Actiondate”的日期列,使用
isDate()
循环查询显示它是一个日期列,但在该查询的查询中,它被视为一个字符串。因此,当我在where子句中应用日期过滤器时,它无法正确进行比较:

<cfquery ... >
SELECT *
FROM arguments.q
WHERE 1=1
<cfif isDate(arguments.dateFrom)>
    AND actiondate >= <cfqueryparam cfsqltype="cf_sql_timestamp" value="#arguments.dateFrom#">
</cfif>
<cfif isDate(arguments.dateFrom)>
    AND actiondate <= <cfqueryparam cfsqltype="cf_sql_timestamp" value="#arguments.dateTo#">
</cfif>
</cfquery>
但同样地,
isDate(actiondate)
在循环查询时返回true。我可以解决这个问题,但是有没有一种方法可以做我需要做的事情,仍然使用query的查询?

(来自评论…)


IsDate
验证值是否可以转换为日期。这并不意味着该值已经是日期/时间对象。对于cfspreadsheet,返回的查询值是字符串。当您将它们与cfqueryparam值(日期/时间对象)进行比较时,您是在比较苹果和橙子。因此QoQ将日期/时间值隐式转换为字符串,并得出错误的答案

要在“ActionDate”上执行日期比较,必须首先使用将字符串转换为日期/时间对象。假设所有值都是有效的日期字符串,格式为mm/dd/yyyy,请先使用硬编码值(如2015年5月11日)进行尝试。然后插入变量

WHERE CAST(actionDate AS DATE) = <cfqueryparam value="11/05/2015" 
                                     cfsqltype="cf_sql_date">
WHERE CAST(actionDate作为日期)=
(来自评论…)


IsDate
验证值是否可以转换为日期。这并不意味着该值已经是日期/时间对象。对于cfspreadsheet,返回的查询值是字符串。当您将它们与cfqueryparam值(日期/时间对象)进行比较时,您是在比较苹果和橙子。因此QoQ将日期/时间值隐式转换为字符串,并得出错误的答案

要在“ActionDate”上执行日期比较,必须首先使用将字符串转换为日期/时间对象。假设所有值都是有效的日期字符串,格式为mm/dd/yyyy,请先使用硬编码值(如2015年5月11日)进行尝试。然后插入变量

WHERE CAST(actionDate AS DATE) = <cfqueryparam value="11/05/2015" 
                                     cfsqltype="cf_sql_date">
WHERE CAST(actionDate作为日期)=

您意识到两个CFIF都检查相同的值吗?请将参数用引号括起来:
“”
。这样行吗?@trincot,你自己试过吗?你得到了预期的结果吗?很难说你是否可以用Q of Q做你需要做的事情,因为不清楚你想做什么。
IsDate
验证一个值是否可以转换成日期。这并不意味着该值已经是datetime值。对于cfspreadsheet,返回的查询值是字符串。当您尝试将字符串与cfqueryparam值(即datetime对象)进行比较时,QoQ会隐式转换为字符串,并得出错误的答案。若要通过QoQ对它们执行日期比较,必须使用
CAST
并将它们转换为日期/时间对象。您知道两个CFIF检查相同的值吗?请将参数括在引号中:
'
。这样行吗?@trincot,你自己试过吗?你得到了预期的结果吗?很难说你是否可以用Q of Q做你需要做的事情,因为不清楚你想做什么。
IsDate
验证一个值是否可以转换成日期。这并不意味着该值已经是datetime值。对于cfspreadsheet,返回的查询值是字符串。当您尝试将字符串与cfqueryparam值(即datetime对象)进行比较时,QoQ会隐式转换为字符串,并得出错误的答案。要通过QoQ对它们执行日期比较,必须使用
CAST
并将它们转换为日期/时间对象。