2013-07-04 2 views
15

나는 항상 ORACLE SQL 쿼리의 날짜 형식과 혼동하고 함께 Google을 사용합니다. 누군가가 데이터베이스 테이블에서 다른 형식의 데이터를 가지고있을 때 가장 간단한 방법을 설명 할 수 있습니까?날짜 형식에 대한 Oracle SQL 쿼리

예를 들어 나는 ES_DATE와 같은 날짜 열을 가지고 있으며, 현지 시간대와 함께 TIMESTAMP (6) 데이터 유형의 27-APR-12 11.52.48.294030000 AM으로 데이터를 보유합니다.

enter image description here

은 그 특정 일에 대한 데이터를 가져 오기 위해 간단한 선택 쿼리를 작성하고 그것을 나에게 아무 것도 반환하지 않습니다. 누군가 나를 설명 할 수 있습니까?

select * from table 
where es_date=TO_DATE('27-APR-12','dd-MON-yy') 

또는

select * from table where es_date = '27-APR-12'; 

답변

27

to_date() 00:00:00에서 날짜를 반환, 그래서 당신은 날짜로부터 분 당신이 비교하고 "제거"해야

select * 
from table 
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy') 

정기적으로 수행하는 작업 인 경우 trunc(es_date)에 색인을 생성하려고합니다.

'27-APR-12' 리터럴은 기본 날짜 형식이 다른 것으로 변경되면 매우 쉽게 실패 할 수 있습니다.

당신이 implict 데이터 형식 변환에 의존 TO_DATE의 사용량을 (to_date()를 사용하지 바로 않았다 있지만)이 여전히있다 : 그래서 반드시 당신이 항상 적절한 형식 마스크 (date '2012-04-27' 또는 ANSI 문자)로 to_date()를 사용하도록 미묘한 함정은 형식이 'dd-MON-yy'이므로.

다른 언어 설정을 사용하면 쉽게 실패 할 수 있습니다. TO_DATE('27-MAY-12','dd-MON-yy') NLS_LANG이 독일어로 설정된 경우 형식이 다른 언어로 된 내용은 피하십시오. 4 자리 연도와 숫자 만 사용 'dd-mm-yyyy' 또는 'yyyy-mm-dd'

+0

에서 제공

select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015'; 

TO_DATE : 당신은 우리에게 모든 것을 말하는 것은 아니다. 문제를 보여주는 http://sqlfiddle.com에서 간단한 예제를 작성하십시오. –

+0

@ user2246725 : 저를 위해 일하십시오 : http://sqlfiddle.com/#!4/1eb57/5 –

+0

정확한 날짜를위한 자료를 여기에서 얻지 않을 것이다 : -'B.Timelog = to_date ('14 -Apr -17 ','DD-MM-YY ')' – BNN

1

왜 날짜를 문자열로 전달합니까?

난 당신이

Date myDate = new SimpleDateFormat("dd-MM-yy").parse("27-04-12"); 
java.sql.Date mySqlDate = new java.sql.Date(myDate.getTime()); 

같은 것을 사용 그리고이와 PreparedStatement 대신

Connection conn = // get connection to db somehow 
PreparedStatement pst = conn.prepareStatement("select * from table 
where es_date = ?") 
pst.setDate(1, mySqlDate); 

ResultSet rs = pst.executeQuery(); 

를 사용하도록 쿼리를 수정하는 것이 좋습니다, 당신은 날짜에 대한 데이타베이스 고유의 형식을 기억할 필요가 없습니다 .

+12

왜 쿼리가 Java에서 실행되고 있다고 생각합니까? –

2

오라클 날짜 위치를 선택 쿼리를 같은 날짜 형식을 사용하고있는 경우 : 오라클 user2246725 @