2011-11-10 81 views
3

我使用的是Oracle,我有一個選擇查詢,我想從庫存表年份大於或等於選擇2000年cfqueryparam日期大於或等於

Select * from Inventory 
where 
manufac_date >= <cfqueryparam value="01/01/2000" cfsqltype="CF_SQL_DATE"> 

我只得到那些年份大於2000年的數值,但不包括2000年以後的數據。

有什麼意見或建議嗎?

+0

您能得到什麼,如果你使用'manufac_date>'?如果它是相同的,我會懷疑你的數據。 – ale

回答

1

也許Oracle是不同的。但只要它承認cf_sql_date,而不僅僅是cf_sql_timestamp,我認爲沒有理由它不應該工作。你積極

  1. 表中包含該期間
  2. 記錄這些記錄不被排除其他一些條件
  3. 你實際上是使用>=並不僅僅是>
1

您應該使您的cfqueryparam值爲日期對象

manufacDateFilter = createDate(2000, 1 , 1); 

查詢,那麼你必須

where 
manufac_date >= <cfqueryparam value="#manufacDateFilter#" cfsqltype="CF_SQL_DATE"> 

或使用Oracle的to_date函數像這樣(沒有測試,但應該工作)

manufac_date >= to_date(<cfqueryparam cfsqltype="cf_sql_varchar" value="01/01/2000">,'mm/dd/yyyy') 
+0

同意不應該爲日期操作使用字符串,應該使用日期。 Fransis不應該將它們的日期值存儲爲字符串;他們應該是日期。 –

+0

毫無疑問,日期時間對象更可取。但是,CF應該將該特定的美國日期字符串解析爲相同的日期值。這使得你想知道是否有其他事情正在發生。 – Leigh

+0

一開始處理數據庫中的日期並不是最簡單的事情。尤其是對於implizit日期轉換,Oracle顯得非常挑剔。使用to_date()或to_char()總是一個好主意,可以爲您節省大量工作和麻煩。另一種選擇是使用ISO日期格式(2010-12-31),該格式可以在大多數(所有)數據庫引擎中正確轉換。 –

相關問題