2010-06-28 121 views
1

这是我的查询。在Coldfusion中比较日期时间值,而不是日期CFQUERY

<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's将不会显示在结果中,除非差距至少有一天。

如何针对最小精度对此查询进行优化?

我知道可能使用的两个函数,DateCompare的DateDiff &,但我不知道如何在查询中应用它们。

DateDiff的( “日期部分”, “日期1”, “日期2”)

DateCompare( “DATE1”, “DATE2”[ “日期部分”])

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 

任何帮助将不胜感激。

回答

6

尝试使用CF_SQL_TIMESTAMP,即:

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

我不知道,如果你需要的maxlength属性。我发现CF映射需要时间戳来获得所需的精度。

+2

我相信这是正确的。通过使用CF_SQL_DATE,可以消除时间信息,因此数据库服务器必须比较的所有内容都是日期信息;因此最准确的可能是一天。如果你包含时间信息,那么它将在计算中使用它。 – 2010-06-28 11:39:15

+0

这解决了它。不胜感激! – Nich 2010-07-03 17:43:48

1

MySQL的函数timestampdiff应该做你需要什么

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 

单位值应分钟DAY

+0

这也行得通,谢谢李。 – Nich 2010-07-03 17:45:14

0

我是一个MS-SQL家伙自己,但使用DateDiff函数,并计算是否结果是肯定的,否定的或零应该告诉你你需要的信息。

但是,我不知道为什么你需要这样做。 IS LESS THAN测试应该产生所需的结果,唯一我能想到的是如果#yourDate#变量不够详细,即不包括时间,那么你的时间将被解释为00:00:00,这会歪曲你的结果。我会建议确保#yourDate#中的数据尽可能具体。