2009-08-12 11 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 

私は(実際には、リスSQLで)JDBCを介して実行。 "2009-08-01"はとても便利な時間ではありません。私のコードでは、私はResultSet.getTime()を使うことができます。しかし、どのように一般的なクエリで時間を得ることができますか?結果をキャストする方法はありますか?

答えて

1

Oracleには、「時刻」データ型がありません。 DATEは2番目の日付と時刻に正確です。それはまた、より正確なタイムスタンプを持っています。

to_date()コールを実行すると、... DATE! NLS設定の仕方に応じて、その日付のテキストを表示することができます。 NLSの設定は、日付書式、タイムスタンプ書式、通貨文字、小数点区切り文字などを制御します。NLS設定は、DATEデータを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値になります。 where句のTimeでのクエリが適切に機能するように、曜日の部分を一定の値(上記の1970年1月1日のように)にしておいてください。

+0

ありがとうございました。何らかの理由で、私はTO_DATE()で時刻を指定するだけで、Oracleのエンジニアが一定の日の部分を使用することを期待していました。 –

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); 

を、それはあなたが必要な結果を生成する必要があります。

関連する問題