2012-05-23 65 views
1

SQL新鮮出爐,與我無關。我正在使用java,eclipse和JDBC。SQL Where子句中的日期範圍

您好所有,我有3個表(companypriceVolumedividend),其中priceVolume包含一個稱爲transdate(串一個股值分裂的日期爲幾個不同的類別,IE。openValue,CloseValue,averageValue .. 。)。在我的所有表格中,主鍵是Ticker公司的股票代碼)。

我在公司裏也有一個屬性叫行業,它告訴我什麼行業是股票來自。

我有一段時間,例如09.25.2001至02.28.2012其中的一個,如果公司位於所選行業,我想從priceVolume中獲取值。

我有這個查詢,我不知道如何使用WHERE子句給我這個範圍,只有這個範圍。如果類型是日期類型,我想我會知道如何對它進行描述。然而,目前,作爲一個字符串,我不知道。我也無法控制數據庫,只是從中讀取數據。

ResultSet rsTickers = stat.executeQuery("SELECT Ticker, OpenValue, CloseValue, 
TransDate FROM company NATURAL JOIN pricevolume WHERE industry = " + GivenIndustry + " 
GROUP BY ticker"); 

目前,我有我的程序設置,使它只是給我的所有行的誰是行業的特定行業相匹配,我只是有點通過他們在我的節目(我扔掉了所有的一個人的誰不在跨度)。它有效,但我覺得它確實是無效的。所以現在我想限制我的查詢只適合我的標準的transDates。

我只想看看如何做得更好。

回答

2

可以轉換爲datetime和檢查這樣

ResultSet rsTickers = stat.executeQuery("SELECT Ticker, OpenValue, CloseValue, 
TransDate FROM company NATURAL JOIN pricevolume WHERE industry = " + GivenIndustry + " 
AND CAST(transDates AS DATETIME) BETWEEN '2001-9-25' AND '2012-2-28' 
GROUP BY ticker"); 
+0

不完全是,他會被燒傷的11個月和12個,其中排序像一月,是嗎?編輯 - 我可能會考慮鑄造兩個字符串日期也;那麼格式不是問題。這是一個時髦的想法。 –

+0

我可以說('2001-9-25'AS DATETIME)嗎? – AlexLordThorsen

+0

你可以說'cast('2001-09-25'爲DATETIME)'嘗試一下並回報。 –

2

您想添加一個BETWEEN條款:

ResultSet rsTickers = stat.executeQuery("SELECT Ticker, OpenValue, CloseValue, 
TransDate FROM company NATURAL JOIN pricevolume WHERE 
transdate between ? and ? and 
industry = " + GivenIndustry + " 
GROUP BY ticker"); 
+0

感謝您的回覆。 – AlexLordThorsen