2012-07-13 173 views
0

我試圖尋找其被構造這樣日期範圍之間進行選擇,在這些日期

trans_Date, customer_age, etc 

如果客戶年齡是年齡在交易的時間記錄在控制了年齡。我需要做的是選擇所有目前特定年齡的客戶,這些客戶在日期範圍內進行了交易。

可以說,我只是想在2005年和2010年

之間

我想出了這個

select * from trans_logs 
where trans_date between TO_DATE("07/13/2005:00:00","MM/DD/YYYY:HH24:MI" and TO_DATE("01/01/2010:00:00","MM/DD/YYYY:HH24:MI") 
and customer_age between 13 and 18 

我得到一些正確的結果誰購買目前的20歲,但我也得到誰辦理的人2005年18(使他們現在25)

and((customer_age=13 and trans_date BETWEEN TO_DATE('01-JAN-2005:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2005:23:59','DD-MON-YYYY:HH24:MI')) 
or (customer_age=14 and trans_date BETWEEN TO_DATE('01-JAN-2006:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2006:23:59','DD-MON-YYYY:HH24:MI')) 
or (customer_age=15 and trans_date BETWEEN TO_DATE('01-JAN-2007:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2007:23:59','DD-MON-YYYY:HH24:MI')) 
or (customer_age=16 and trans_date BETWEEN TO_DATE('01-JAN-2008:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2008:23:59','DD-MON-YYYY:HH24:MI')) 
or (customer_age=17 and trans_date BETWEEN TO_DATE('01-JAN-2009:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2009:23:59','DD-MON-YYYY:HH24:MI')) 
or (customer_age=18 and trans_date BETWEEN TO_DATE('01-JAN-2010:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2010:23:59','DD-MON-YYYY:HH24:MI'))) 

但返回一個錯誤,說我缺少一個右括號。 1.我錯過了什麼?和2.有沒有更有效的方法來做到這一點?

編輯:忘記了第二次約會和其他一些格式化的東西

+0

保存年齡永遠不是一個好主意,你應該存儲出生日期!此外,你很可能有一個提取功能,所以你可以做一些事情,比如'提取(年份來自trans_date)BETWEEN 2005 AND 2010' – 2012-07-13 16:00:30

+0

@VincentSavard不幸的是,我無法控制公司存儲生日的政策,相信我,那是第一個我想到的事情 – 2012-07-13 16:36:01

回答

1

你需要計算當前的年齡,給你的信息。這個想法是將交易以來的年數與年齡相加。我不偉大與Oracle日期時間函數,但下面應該工作:

select tl.*, 
from trans_logs tl 
where customer_age + (SYSDATE- trans_Date)/365 = 20 

請注意,這是一個近似值,因爲你將會得到人誰是關於「20」,這取決於他們的生日和之間的relatinonship交易日期。

如果可以的話,最好帶上生日。我明白,詢問他們的年齡可能比詢問他們的生日更容易,所以你可能沒有選擇。

相關問題