2009-08-12 4 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에는 "Time"데이터 유형이 없습니다. 날짜와 시간은 초 단위로 정확합니다. 또한 정확도가 더 높은 타임 스탬프가 있습니다.

to_date() 호출을 수행하면 ... DATE! NLS 설정 방법에 따라 원하는 날짜에 텍스트를 표시 할 수 있습니다. NLS 설정은 날짜 형식, 타임 스탬프 형식, 통화 문자, 소수점 구분 기호 등을 제어합니다. NLS 설정은 DATE 데이터를 yyyy-mm-dd로 표시하도록 정의됩니다.

Oracle DATE에서 일반적인 JDBC 항목을 수행하려는 경우 날짜의 "day"부분에 "정적"값을 지정한 다음 시간을 지정해야합니다. 다음 예제를 고려하십시오.

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

결과는 16:31:59의 값을 포함하는 java.sql.Time 값이됩니다. 1970 년 1 월 1 일처럼) 일정 부분을 일정한 값으로 유지하여 where 절의 시간이 포함 된 쿼리가 제대로 작동하도록해야합니다.

+0

감사합니다. 어떤 이유로, 오라클 엔지니어가 TO_DATE()에서 시간 만 지정하면 일정 부분을 사용하게 될 것으로 예상했습니다. –

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

을 당신이 필요로하는 결과를 생성한다.

관련 문제