2012-06-22 67 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