mysql select查询的日期未返回正确的记录
我有一个查询,它应该使用连接从多个表中提取记录,并根据日期范围过滤所有记录。它似乎在随机抽取一组记录——它不会返回联接中的所有记录,我想如果它完全忽略日期,它会这样做,但是它抽取的记录与日期标准不匹配 这是一个问题;我试过两种不同的方法,结果都是一样的 备选案文1:mysql select查询的日期未返回正确的记录,mysql,sql,Mysql,Sql,我有一个查询,它应该使用连接从多个表中提取记录,并根据日期范围过滤所有记录。它似乎在随机抽取一组记录——它不会返回联接中的所有记录,我想如果它完全忽略日期,它会这样做,但是它抽取的记录与日期标准不匹配 这是一个问题;我试过两种不同的方法,结果都是一样的 备选案文1: SELECT p.PurchActvtyID, p.PurchAmt, p.CcAuthCode, p.PurchDT, v.VoucherNbr, a1.name as billName, a1.company as bil
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-2816:33:13、2010-11-1110:37:30的记录,以及其他一些记录。好消息是,它正在拉入所有日期在查询中指示的日期之间的记录;坏消息是,这是随机的,我可以告诉你,还有其他不符合标准的记录
谁能给我指出正确的方向吗?我可以在几周前发誓这段代码是有效的,但现在它不是,即使它没有任何更改。这可能是因为您需要:
where (v.TypeFlag='S' or v.TypeFlag is null)
日期不正确的结果都会有TypeFlags='S',对吗
此外,如果使用介于两者之间的日期,则应使用所需的最后一天的下一天,否则,最后一天将只包括PURCHD=2010-12-09 00:00:00的记录,并且从该天开始的所有其他内容都将被忽略-我猜。我将尝试使用paren。数据库中当前的所有结果都有TypeFlag=S,因此这不是检查错误结果的有效方法。至于日期,否-我们在查询的日期字段中专门添加了时间值,请参见选项1,以确保它从第一个日期的上午12:01到第二个日期的晚上11:59获取所有信息。我想您应该检查一下,谢谢;从现在起,我会把它放在书签上。不知道为什么我以前从未遇到过不使用parens的问题。。。我想我只是幸运而已。在任何情况下,它似乎都解决了这个问题。专业提示:对于日期范围来说,BETWEEN不太有效,因为范围的结尾是包含在内的。col>=startdate和col