ColdFusion QOQ,比较时间值?

时间:2013-04-25 06:15:13

标签: mysql coldfusion coldfusion-9 qoq

我正在尝试使用ColdFusion QOQ执行以下代码,但它不会检索任何记录。我使用时间格式为“HH:mm”并使用MySQL作为后端,原始时间列的数据类型为“TIME”。

<cfquery dbtype="query" name="getCount">
    SELECT count(*) as mycount
    FROM getExams
    WHERE start_time <= <cfqueryparam cfsqltype="cf_sql_time" value="#curr_time#">
</cfquery>

我可以使用<cfqueryparam>成功比较日期值。但是,它不适用于时间列。有人可以帮忙吗?

更新
这个问题有一个开放的错误报告。见bug #3551866

3 个答案:

答案 0 :(得分:2)

即使经过数小时的努力,我也无法找到一种简单的方法来比较ColdFusion QOQ中的时间值。所以,这是我使用的解决方法:

第1步
要使用Time数据类型检索db列,请使用format hhmmss 例如。在我的MySQL案例中我用过:
CONVERT(DATE_FORMAT(db_time_col, '%H%i'), UNSIGNED INTEGER) as db_time_col

第2步
在ColdFusion QOQ中,将时间值转换为步骤1中使用的相同格式 例如。就我而言,它是:<cfqueryparam cfsqltype="cf_sql_integer" value="#timeFormat(cf_time_col, 'HHmm')#">

答案 1 :(得分:0)

您需要使用createodbcdatetime()/ CreateODBCTime()函数转换日期时间格式,以将当前日期和时间转换为与DB日期和时间格式列进行比较

答案 2 :(得分:0)

问题是没有约会的时间毫无意义。因此,时间数据类型具有应用于其的不可见日期。但是,不同的软件会将不同的日期应用于时间数据类型。

ColdFusion适用似乎适用于1899-12-30。这段代码:

<cfdump var="#CreateTime(18,0,0)#">

返回{ts&#39; 1899-12-30 18:00:00&#39;}

但是,当我运行数据库查询时:

<cfquery name="x" datasource="dw">
 select registration_number, event_time
 from admit_fact

 where date = yesterday
 and discharge
 and datepart(hour, event_time) < 13
 </cfquery>
 <cfdump var="#x#" metainfo="no">

我看到19行的值为{ts&#39; 1970-01-01 11:30:00&#39;}。结果,像这样的QofQ:

<cfquery name="y" dbtype="query">
 select *
 from x
 where event_time < <cfqueryparam cfsqltype="cf_sql_time" value="#CreateTime(18,0,0)#"> 
 </cfquery>

不会返回任何行。在&#34;它值得一拍#34;类别,即使我尝试过:

where cast(event_time as time) < 
<cfqueryparam cfsqltype="cf_sql_time" value="#CreateTime(18,0,0)#"> 

但结果没有改变。像Saurabh一样,我也希望看到一种比较价值的简单方法。