2013-07-23 94 views
0

我正在運行以下查詢很多小時,做了各種更改,但想知道爲什麼DETAIL Query沒有返回任何結果。對於其他連接(FIRSTCONN,SECONDCONN,FOURTHCONN),我也有類似的疑問,它們運行得非常好,並在輸出中顯示期望的日期範圍。誰能弄清楚可能是什麼原因?以下cfquery結果讓我瘋狂

<cfquery datasource = "XX.XX.X.XX" name="master"> 
SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as THIRDCONN,count(Timedetail) as THIRDOCCURANCES ,EVENTS 
FROM MyDatabase 
WHERE EVENTS = "THIRD" 
GROUP BY THIRDCONN; 
</cfquery> 


    DUMP FOR THIRD MASTER <cfdump var = "#master#"> 





<cfquery dbtype="query" name="detail"> 
SELECT * 
FROM master 
WHERE THIRDCONN >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> 
AND THIRDCONN < <cfqueryparam value="#form.enddate#" cfsqltype="cf_sql_date">; 
</cfquery> 


    DUMP FOR THIRD DETAIL <cfdump var = "#detail#"> 

P.S.就像測試一樣,我在詳細查詢中運行了「SELECT * from master」,我得到了預期的主查詢和詳細查詢的相同輸出,但是當我在詳細查詢中提到日期參數時,它會停止顯示輸出。但是,其他連接查詢(FIRSTCONN,SECONDCONN,FOURTHCONN等)的情況不是這樣的

是否有任何其他方式可以運行此查詢或我所做的任何錯誤?

DUMP第三MASTER

 THIRDCONN THIRDOCCURANCES  EVENTS 
    1 {ts '2013-06-06 00:00:00'} 10810 THIRD 
2 {ts '2013-06-07 00:00:00'} 8076 THIRD 
3 {ts '2013-06-10 00:00:00'} 25043 THIRD 
4 {ts '2013-06-11 00:00:00'} 24754 THIRD 
5 {ts '2013-06-12 00:00:00'} 14587 THIRD 
6 {ts '2013-06-13 00:00:00'} 24828 THIRD 
7 {ts '2013-06-14 00:00:00'} 23987 THIRD 
8 {ts '2013-06-15 00:00:00'} 28027 THIRD 
9 {ts '2013-06-16 00:00:00'} 25190 THIRD 
10 {ts '2013-06-17 00:00:00'} 27255 THIRD 
11 {ts '2013-06-18 00:00:00'} 22227 THIRD 
12 {ts '2013-06-19 00:00:00'} 15951 THIRD 
13 {ts '2013-06-20 00:00:00'} 21120 THIRD 
14 {ts '2013-06-21 00:00:00'} 24214 THIRD 
15 {ts '2013-06-22 00:00:00'} 22466 THIRD 
16 {ts '2013-06-23 00:00:00'} 19881 THIRD 
17 {ts '2013-06-24 00:00:00'} 23479 THIRD 
18 {ts '2013-06-25 00:00:00'} 7879 THIRD 

轉儲第三細節

THIRDCONN THIRDOCCURANCES活動

+0

你確定你得到了#form.startdate#和#form.enddate#有效值;你的數據庫中可能會有NULLS導致該問題? –

+0

是的,我使用' '測試了它。你的意思是NULL可以存在於哪裏? – Tan

+1

這聽起來像完全相同[問題從你的其他線程](http://stackoverflow.com/a/17684464/104223)。 **不要混合數據類型**。如果你想執行一個日期比較,你的數據庫查詢必須返回一個**日期對象**,而不是一個字符串(這是'date_format'返回的內容)。即使用'STR_TO_DATE'來返回一個日期對象。 – Leigh

回答

1

聽起來像是你在你的數據庫中的NULL值是擺脫查詢。試着用一些運行查詢像這樣

WHERE isNull(THIRDCONN,getDate()) >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> 
AND isNull(THIRDCONN,getDate())< <cfqueryparam value="#form.enddate#" cfsqltype="cf_sql_date">; 

在這裏你可以代替getDate(),如果你有NULL值,那麼這將確認該問題使用任何日期值。

+0

一旦我有權訪問我的工作站,我會在明天嘗試。謝謝 – Tan

+0

不確定在我的問題的上下文中,「使用任何值代替getDate()」是什麼意思。請澄清。 – Tan

+0

如果數據庫中有'NULL'值,則可以將它們設置爲您想要的任何日期。取決於你是否希望它們包含在查詢中。 –

1

正如Leigh所說,您的查詢實際上是爲日期返回一個字符串,而不是實際的日期。 CF在QoQ中存在混合數據類型的問題 - 第二個查詢嘗試將日期與字符串進行比較,如您所記下的那樣,這可能會產生不可思議的結果。

嘗試改變第一查詢:

<cfquery datasource = "XX.XX.X.XX" name="master"> 
    SELECT Timedetail as THIRDCONN,count(Timedetail) as  THIRDOCCURANCES ,EVENTS 
    FROM MyDatabase 
    WHERE EVENTS = "THIRD" 
    GROUP BY THIRDCONN; 
</cfquery> 
+0

一旦我有權訪問我的工作站,我會在明天嘗試。謝謝 – Tan

+0

該查詢無效。 – Tan

+1

你能否提供一些有關什麼不起作用的更多細節? –

0

好吧,我想通了,我自己的。這裏SQL查詢中不需要STR_TO_DATE函數。我只是用DATE()函數來檢索日期部分。另外,我注意到,在使用DateFormat函數時指定掩碼對於Coldfusion有幫助,而不是指定任何其他格式。

感謝大家的幫助。讚賞。

工作代碼:

<cfparam name="form.startdate" default="#DateFormat(dateAdd('d',-40,now()), 'yyyy-mm-dd')#"> 
<cfparam name="form.enddate" default="#DateFormat(dateAdd('d',-1,now()), 'yyyy-mm-dd')#"> 


<cfquery datasource = "XX.XX.X.XX" name="master"> 
SELECT DATE(Timedetail) as THIRDCONN,count(Timedetail) as THIRDOCCURANCES ,EVENTS 
FROM MyDatabase 
WHERE EVENTS = "THIRD" 
GROUP BY THIRDCONN; 
</cfquery> 





<cfquery dbtype="query" name="detail"> 
SELECT * 
FROM master 
WHERE THIRDCONN >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> 
AND THIRDCONN < <cfqueryparam value="#form.enddate#" cfsqltype="cf_sql_date">; 
</cfquery> 
+0

而不是*描述*你做了什麼,你可以發佈你的最終代碼? – Leigh

+0

當然,我應該將其發佈在我原來的問題上嗎?或者低於那個? – Tan

+0

不,你想保留「問題」。否則,當將來有人閱讀時,這個答案不會有任何意義;-)只是[更新此答案](http://stackoverflow.com/posts/17840934/edit)。我很好奇看到它,因爲使用'DATE()'應該返回與包裝'STR_TO_DATE(DATE_FORMAT(...僅限日期)相同的東西]'。所以真的不應該有任何改變。 – Leigh