2013-04-25 4 views
2

Я пытаюсь выполнить приведенный ниже код с помощью ColdFusion QOQ, но он не извлекает никаких записей. Я использую время в формате «HH: mm» и используя MySQL как backend, а исходный столбец времени имеет тип данных «TIME».ColdFusion QOQ, сравнить значения времени?

<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

ответ

2

Даже после многих часов усилий я не смог найти простой способ сравнить значения времени в ColdFusion QOQ. Итак, вот обходной путь, который я использовал:

Шаг 1
Чтобы получить Db столбцы с типом данных Time, использование формата ччммсс.
например. в моем случае 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')#">

0

вам необходимо преобразовать формат времени даты с createodbcdatetime()/CreateODBCTime() функции для преобразования текущей даты и времени для сравнения с датой DB колонки времени и формата

+0

Я пробовал под кодом, но все еще не повезло. ' SELECT COUNT (*) в качестве mycount ОТ getExams ГДЕ start_time <= ' –

+0

попробуйте использовать этот SELECT COUNT (*) в качестве mycount FROM getExams WHERE start_time <= #createodbcdatetime (curr_time) #» swetha

+0

Тем не менее это не работает даже с createODBCDateTime. Я знаю, что есть решение, предоставленное онлайн на [asadesigner.com] (http://www.asadesigner.com/16-coldfusion/b033bba6f200c1c5.htm), и я также попытался использовать временную метку. Еще не повезло. :( –

0

Проблема заключается в том, что время без даты является бессмысленны. Поэтому у временных типов данных есть невидимая дата. Однако различные программные средства применяют разные даты к временным типам данных.

Применение ColdFusion, похоже, применяется 1899-12-30. Этот код:

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

возвращает {ц '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, я также хотел бы увидеть более простой способ сравнить значения.

+0

Если вы можете определить, что использует ваш сервер базы данных в качестве «скрытой» даты (1970-01-01 в вашем примере), было бы проще просто использовать функцию «CreateODBCDateTime()», используя дату по умолчанию вашего сервер базы данных, а затем желаемое время? –

+0

Мы можем делать все, что вы хотите, как только узнаете, с чем мы имеем дело. Однако ваше предложение, столь же эффективное, как то, что в конечном итоге сделал @Saurabh, не обязательно проще. –

Смежные вопросы