Сравните значения DateTime по Min, а не по Day в Coldfusion CFQUERY - PullRequest
1 голос
/ 28 июня 2010

Это запрос, который у меня есть.

<cfquery name="qryname" datasource="dsn">
UPDATE ticketlist
SET status  = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="Expired"> 
WHERE expdatetime < 
<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_DATE" maxLength = "19">
</cfquery>

Он может дать мне все результаты, у которых время expdatetime меньше, чем # yourdate #, единственная проблема заключается в том, что он показывает только результаты, у которых разница составляет целый день, но не у тех, у кого разница в мин. Таким образом, expdatetime, разница которого меньше, чем # yourtime # by min, не будет отображаться в результатах, если разница не меньше, чем на день.

Как оптимизировать этот запрос для минимальной точности?

Мне известны две функции, которые могут быть полезны, DateDiff и DateCompare, но я не знаю, как применить их в запросе.

DateDiff ("datepart", "date1", "date2")

DateCompare ("date1", "date2" [, "datePart"])

Точность DatePart

* s Precise to the second
* n Precise to the minute
* h Precise to the hour
* d Precise to the day
* m Precise to the month
* yyyy Precise to the year

Любая помощь будет оценена.

Ответы [ 3 ]

6 голосов
/ 28 июня 2010

Попробуйте использовать CF_SQL_TIMESTAMP, т.е.:

<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_TIMESTAMP">

Я не уверен, понадобится ли вам атрибут maxlength. Я обнаружил, что отображение CF должно иметь временную метку, чтобы получить требуемую точность.

1 голос
/ 28 июня 2010

Функция mysql timestampdiff должна делать то, что вам нужно

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Значение единицы должно быть MINUTE или DAY

0 голосов
/ 28 июня 2010

Я сам по MS-SQL, но использование функции DateDiff и вычисление положительного, отрицательного или нулевого результата должно дать вам необходимую информацию.

Но я не уверен, зачем вам это нужно. Тест IS LESS THAN должен дать необходимые результаты, единственное, о чем я могу думать, это если ваша переменная # yourDate # недостаточно конкретна, т.е. не включает время, тогда ваше время будет интерпретироваться как 00:00:00, который искажает ваши результаты. Я бы порекомендовал убедиться, что данные в # yourDate # настолько конкретны, насколько это возможно.

...