查询日期比较的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
并将它们转换为日期/时间对象。