我正在运行以下查询多个小时,进行了各种更改,但想知道为什么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
答案 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>