2010-06-28 123 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#中的數據儘可能具體。