mysql选择查询,日期不返回正确的记录

时间:2010-12-09 21:16:07

标签: mysql sql

我有一个查询应该使用连接从多个表中提取记录,并根据日期范围过滤所有这些记录。它似乎是拉随机组的一组记录 - 它不会返回连接中的所有记录,我想如果它完全忽略了日期,那么它会拉动的记录与日期标准不匹配。

这是查询;我尝试了两种不同的方法,结果相同。

选项1:

SELECT p.PurchActvtyID, p.PurchAmt, p.CcAuthCode, p.PurchDT,  v.VoucherNbr, 
 a1.name as billName, a1.company as billCompany, a1.address1
  FROM arrc_PurchaseActivity p
LEFT JOIN arrc_Voucher v  ON p.VoucherID = v.VoucherID
LEFT JOIN jos_customers_addresses a1 ON p.AcctID = a1.id
where v.TypeFlag='S'  or v.TypeFlag is null 
and p.PurchDT between '20101201000000' and '20101209235959' order by v.ActivatedDT asc

(在这种情况下,我们以编程方式将时间添加到起始和结束范围,以确保我们从开始日期的上午12:01到结束日期的晚上11:59获取每条记录。)

选项2:

SELECT p.PurchActvtyID, p.PurchAmt, p.CcAuthCode, p.PurchDT,  v.VoucherNbr, 
  a1.name as billName, a1.company as billCompany, a1.address1                 
   FROM arrc_PurchaseActivity p
 LEFT JOIN arrc_Voucher v  ON p.VoucherID = v.VoucherID
 LEFT JOIN jos_customers_addresses a1 ON p.AcctID = a1.id
 where v.TypeFlag='S'  or v.TypeFlag is null 
 and p.PurchDT between '2010-12-01' and '2010-12-09' order by v.ActivatedDT asc

我要回的是p.PurchDT等于2010-10-28 16:33:13,2010-11-11 10:37:30以及其他几个人的记录。好消息是它将所有记录与查询中指示的日期之间的日期相提并论;坏消息是它是随机的(据我所知)还会引入其他不符合标准的记录。

有人能指出我正确的方向吗?我可以发誓这个代码几个星期前正在运行,但现在不是,即使它没有任何变化。

1 个答案:

答案 0 :(得分:0)

这可能是因为你需要():

 where (v.TypeFlag='S'  or v.TypeFlag is null)

日期不正确的结果都会有TypeFlags ='S',对吗?

此外,如果你在中间使用日期,你应该使用你想要的最后一天,否则,最后一天只会包含PurchDT = 2010-12-09 00:00:00的记录,那一天的所有其他内容都会被忽略 - 我猜。