2009-12-01 2 views
0

면책 조항 : 오래 걸리지 않는 추악한 코드베이스에는 손이 닿지 않는 것이 좋습니다."날짜"열에 적용 할 때 datetime 상수의 "시간"부분을 무시하는 MySQL 설정이 있습니까?

  • DATE 유형의 (많은 다른 사람의 사이에서) 열이있는 데이터베이스의 테이블이 있습니다.
  • java.util.Date 매개 변수로 쿼리 (자동으로 생성 된 토크 - 질문하지 않음)가 있습니다. 토크는 전체 datetime으로 형식을 지정합니다.

그래서, MySQL은 점점 쿼리는 같은 것입니다 :

SELECT * FROM my_table 
WHERE my_date = '20091201105320'; // 2009-12-01 10:53:20 

문제는 MySQL은 5.0.27 표준을 가지고 하나 개의 서버에 그 잘 작동한다 - 모든 레코드 수익률로 my_date이 '2009-12-01'로 설정된 my_table에서 가져옵니다. MySQL 5.0.45가있는 다른 서버에서는 작동하지 않습니다. 거기에 데이터가 있습니다 - 수동으로 시간 부분을 트리밍 후 쿼리를 실행하면 올바른 결과를 다시 얻습니다.

질문 :

는 설정 (연결 문자열) MySQL의 구성 파일 또는 세션 별 변수 중 하나, 어딘가에 아니면 다른 곳 날짜 변환 상수 문자열 중 시간 부분을 무시 MySQL을 강제로 ?

분명히 DATE() 코드베이스를 변경하지 않고서는 사용할 수 없습니다.

답변

1

분명히 나는 ​​운이 좋다. MySQL manual에서 :

DATEDATETIME 값 비교의 MySQL 5.0.42에

앞서, DATETIME 값의 시간 부분을 무시하거나, 문자열 비교로 비교가 수행 될 수있다. MySQL 5.0.42부터 DATE 값은 '00:00:00'으로 시간 부분을 추가하여 DATETIME 유형으로 강제 변환됩니다.

누군가가 비슷한 상황에서 자신을 찾을 경우, 내가 찾은 유일한 해결 방법이라고 할 수 : 제로로 java.util.Date 인스턴스의

  1. 재설정 시간 필드 (시간/분/초).
  2. 패치 (그리고 나는 "패치"를 의미합니다 - 자신의 어댑터를 플러그인 할 방법이 없습니다) getDateString() MySQL의 Torque의 DB 어댑터 (org.apache.torque.adapter.DBMM)는 날짜의 시간 필드가 0인지 확인하고, "날짜 전용"형식을 사용하십시오.
1

Criteria cr = new Criteria(); 
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
String fixedDate = dateFormat.format(date); 
cr.add("my_date", (Object)("my_date = '" + fixedDate + "'"), Criteria.CUSTOM); 
토크

패치보다 간단
관련 문제