데이터베이스에 저장된 값을 변경하지 마십시오. 당신이 그것을 출력되는 방식을 변경 :
timestamp = @model.updated_at # where @model is your model object
# output it in a format that overrides the values for minute and second
puts timestamp.strftime "%Y-%m-%d %H:00:00"
당신이 사용할 수있는 다른 형식 지정자에 대한 strftime
루비 문서를 참조하십시오. 당신의 갱신을 바탕으로
는
, 나는 아직도 updated_at
가 저장되는 방법을 변경하지 않고 대신 쿼리의 ORDER BY
내에서 날짜를 포맷 할 것입니다. 예를 들어,
ORDER BY DATE(updated_at), HOUR(updated_at), ...
약 22,000 개의 레코드가있는 내 응용 프로그램의 라이브 테이블에 대해 매우 빠른 프로파일 링 테스트를 수행했습니다. ORDER BY updated_at
은 2.94에서 3.19 초 사이에 완료되었으며 평균 시간은 3.00 초입니다. ORDER BY DATE(updated_at), HOUR(updated_at)
은 2.93 초에서 3.06 초 사이에 완료되었으며 평균 시간은 2.99 초입니다. 여기에 프로파일 링 데이터는 다음과 같습니다 이것은 당신이 활성 레코드와해야 할 일이 아니다
+----------+------------+-----------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------------------------------------+
| 1 | 2.94530500 | SELECT * FROM posts ORDER BY updated_at |
| 2 | 2.94583800 | SELECT * FROM posts ORDER BY updated_at |
| 3 | 3.18711700 | SELECT * FROM posts ORDER BY updated_at |
| 4 | 2.96923700 | SELECT * FROM posts ORDER BY updated_at |
| 5 | 2.97255400 | SELECT * FROM posts ORDER BY updated_at |
| 6 | 3.06706800 | SELECT * FROM posts ORDER BY DATE(updated_at), HOUR(updated_at) |
| 7 | 3.00414400 | SELECT * FROM posts ORDER BY DATE(updated_at), HOUR(updated_at) |
| 8 | 2.95551500 | SELECT * FROM posts ORDER BY DATE(updated_at), HOUR(updated_at) |
| 9 | 3.02181900 | SELECT * FROM posts ORDER BY DATE(updated_at), HOUR(updated_at) |
| 10 | 2.93130000 | SELECT * FROM posts ORDER BY DATE(updated_at), HOUR(updated_at) |
+----------+------------+-----------------------------------------------------------------+
나는 그것을 언급하지 않은,하지만 난 데이터를 정렬하고 싶습니다 때문에 내가 부탁 한 일을하려는 이유는, 시간과 초가 생략 된 날짜. 물론 필자는 필자가 선택한 날짜를 형식화 할 수 있지만 좋은 성능 결정이라고는 생각하지 않습니다. – spacemonkey
하지만 데이터 쿼리시 SQL 함수를 사용할 때 성능은 어떻습니까?이 데이터는 실제로 자주 쿼리되는 반면 매우 자주 업데이트되지 않기 때문에 – spacemonkey
수동으로 설정하려고해도 Rails가 자동으로 업데이트되기 때문에'updated_at'이 저장되는 방식을 바꾸려면 약간의 둘러보기를 거쳐야합니다. 레코드를 저장할 때 원하는 값으로 설정하십시오. –