2012-06-22 125 views
0

我这里有这个SQL代码..SQL使用日期在where子句

SELECT cl.clientid, 
     cl.clientname, 
     cl.billingdate, 
     cp.startdate, 
     cp.expiration, 
     (SELECT COUNT(*) 
      FROM invoice 
      HERE client = cl.clientid) AS invoicecount 
FROM client cl 
INNER JOIN clientplan cp ON cp.client = cl.clientid 
WHERE cl.isbilled = 1 AND expiration is NULL AND expiration > '2012-06-22' 

我的问题是,一个客户端可以有3个客户端计划,他们要么有到期日或到期为NULL。我正在尝试获取未过期的行或为NULL的行。

我在做什么错?

+3

如果日期为NULL,则永远不会有值。[编辑]所以它将会是EXPIRATION IS NULL或(EXPIRATION IS NOT NULL AND EXPIRATION> '22 -JUN-2012')[/编辑] – PaddyC

+1

感谢帕迪C,它的工作! – user979331

+0

AND'并不意味着'这些记录和那些记录'它意味着'这是真的,这是真的'。在你的情况下,你*不能*有'expiration IS NULL' ***和***'expiration>'2012-06-22''同时成立。你的意思是'cl.isbilled = 1 AND(expiration为NULL或expiration>'2012-06-22')' – MatBailie

回答

4

我不知道,但不是你想要这个东西:

SELECT cl.clientid, cl.clientname, cl.billingdate, cp.startdate, cp.expiration, 
(select count(*) from invoice where client = cl.clientid) as invoicecount 
FROM client cl 
inner join clientplan cp on cp.client = cl.clientid 
where cl.isbilled = 1 and (expiration is NULL or expiration > '2012-06-22') 

随着或代替,并在到期。因为到期日期不能为空,并且'2012-06-22'...

+0

感谢朋友它的作品! – user979331