我正在尝试使用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
答案 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一样,我也希望看到一种比较价值的简单方法。