레거시 데이터베이스에서 실행중인 Sequel을 사용하여 Ruby 프로그램을 작성하고 있습니다. 다른 날짜 형식을 다루는 데 문제가 있습니다.DB에서 다른 datetime 형식을 다루고 있습니까?
DB에는 열 start_date
이있는 테이블이 있습니다. 일부는 2013-09-01T08:28:00+10:00
처럼 ISO8601를 사용하는
- : 속편의 마이그레이션 스크립트에서 나는 SQLite는의
timestamp
유형 인DateTime
로 설정하지만, 기존의 데이터는 다른 시간 형식을 가지고있다. - 일부 사용자는 다른 사용자 이름을 사용하고 있습니다 (예 :
2013-09-01 08:28:00.000000+1000
).
문제는 테이블에 대해 쿼리를 실행하고 start_date
으로 필터링하려고하면 두 날짜 시간 형식 간의 차이로 인해 잘못된 결과가 발생한다는 것입니다.
내가 사용 쿼리는 다음과 같습니다
current = Time.now
MyModel.where { start_date < current }
속편은 다음과 같이 SQL로 변환합니다 : 그것은 문자열로 날짜를 비교하는 것처럼 내 로컬 테스트에서
SELECT * FROM `my_model` WHERE `start_date` < '2013-09-01 08:28:00.000000'
을, 속편 보인다 따라서 2013-09-01 08:28:00.000000+1000
은 2013-09-01T01:28:00+10:00
보다 작습니다. 공백이 T
보다 작기 때문에 이것은 내가 원하는 것이 아닙니다.
나는 같은 iso8601
시간 사용할 수 있습니다
current_iso8601 = Time.now.iso8601
MyModel.where { start_date < current_iso8601 }
을하지만 데이터베이스가 두 개의 서로 다른 날짜 형식을 가지고 있기 때문에이 문제가 해결되지 않습니다.
내 질문은 :
- 합니까 루비/속편 지원은 문자열로하지 날짜/시간을 기준으로 데이터베이스를 조회?
- 다른 날짜 형식으로 작동합니까?
- SQLite는 로컬 테스트 용이며 프로덕션 환경은 MySQL입니다. 따라서 솔루션은 일반 Sequel 메서드를 어댑터로 사용해야하며 데이터베이스 관련 메서드가 없어야합니다.
참고 : 프로그램은 Rails 응용 프로그램이 아닙니다.
대단히 감사합니다!