2009-08-12 65 views
0

Oracle不支持TIME數據類型,但可以使用DATE存儲TIME。如何將Oracle「TIME」轉換爲查詢中的JDBC Time?

我的問題:

select to_date('2009-06-30', 'YYYY-MM-DD') as "DATE", 
     to_date('16:31:59', 'HH24:MI:SS') as "TIME" 
from dual 

產量:

DATE  TIME 
2009-06-30 2009-08-01 
當我運行它通過JDBC(在松鼠SQL,其實)

。 「2009-08-01」不是一個非常有用的時間。在我的代碼中,我可以使用ResultSet.getTime()。但是,如何在通用查詢中獲得時間呢?有沒有一種方法來演示結果?

回答

1

Oracle沒有「時間」數據類型。它有一個DATE,日期和時間精確到秒。它還具有更高精度的時間戳。

當您執行to_date()調用時,您將得到一個... DATE!根據您如何建立NLS設置,您可以根據需要顯示該日期的文本。 NLS設置控制日期格式,時間戳格式,貨幣字符,小數分隔符等等。顯然,您的NLS設置被定義爲將日期數據顯示爲yyyy-mm-dd。

如果您嘗試使用Oracle DATE執行泛型JDBC,則需要爲日期的「日」部分指定一個「靜態」值,然後指定時間。考慮這個例子:

String sql = "Select to_date('1970-01-01 ' || ? ,'YYYY-MM-DD HH24:MI:SS) as MY_TIME from dual"; 
Connection conn = null; //get Connection from somewhere 
PreparedStatement stmt = conn.prepareStatement(sql); 
stmt.setString(1, "16:31:59"); 
ResultSet rs = stmt.executeQuery(); 
rs.next(); //get to first element of result set; 
java.sql.Time myTime = rs.getTime(1); 

myTime的結果將是一個包含16:31:59值的java.sql.Time值。請記住保持day部分的某個常量值(如上面的1970-01-01),以便where子句中的Time可以正常工作。

+0

謝謝。出於某種原因,我期待Oracle工程師在TO_DATE()中只指定時間時使用恆定的日期部分。 – 2009-08-20 07:52:15

0

DATE類型存儲爲小數值 - 日期爲整數部分,一天的時間爲小數部分。所以,每個DATE都有時間,你可以用這樣的東西來提取。

select TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS') from dual; 
0

如果我得到你可以使用字符串值的時間點:

select to_date('2009-06-30', 'YYYY-MM-DD') as "DATE", 
     '16:31:59' as "TIME" 
from dual; 

String time_str = ResultSet.getString("Time"); 
java.sql.Time jsqlT = java.sql.Time.valueOf(time_str); 

它應該產生您需要的結果。

相關問題