2

我正在尝试使用 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>. 但是,它不适用于时间列。任何人都可以帮忙吗?

更新:
这个问题有一个开放的错误报告。请参阅错误 #3551866

4

3 回答 3

2

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

步骤 1
要检索具有 Time 数据类型的 db 列,请使用格式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')#">

于 2013-04-30T05:54:41.753 回答
0

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

于 2013-04-25T06:17:28.463 回答
0

问题是没有日期的时间是没有意义的。因此,时间数据类型应用了一个不可见的日期。但是,不同的软件将不同的日期应用于时间数据类型。

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

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

返回 {ts '1899-12-30 18:00:00'}

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

<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 '1970-01-01 11:30:00'}。结果,像这样的 QofQ:

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

不会返回任何行。在“值得一试”类别中,即使我尝试过:

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

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

于 2013-04-25T12:34:34.703 回答