以下cfquery结果让我发疯

时间:2013-07-23 23:31:38

标签: mysql coldfusion coldfusion-8 cfml

我正在运行以下查询多个小时,进行了各种更改,但想知道为什么DETAIL Query没有返回任何结果。对于其他连接我也有类似的查询(FIRSTCONN,SECONDCONN,FOURTHCONN),它们运行得非常好,并在输出中显示所需的日期范围。谁能弄明白可能是什么原因?

<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等)

还有其他方法可以运行此查询或我做过的任何错误吗?

第三个主人的转移

        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 THIRDOCCANANCES EVENTS

3 个答案:

答案 0 :(得分: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,这将确认该问题。

答案 1 :(得分: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> 

答案 2 :(得分:0)

好吧,我自己想通了。 SQL查询中不需要STR_TO_DATE函数。我只使用DATE()函数来检索日期部分。另外,我注意到在使用DateFormat函数yyyy-mm-dd时指定掩码对于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>