PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Độ phân giải mili giây của DateTime trong Ruby

ActiveRecord nên bảo toàn độ chính xác đầy đủ từ cơ sở dữ liệu, chỉ là bạn không xem xét nó đúng cách. Sử dụng strftime%N định dạng để xem giây phân số. Ví dụ:psql nói thế này:

=> select created_at from models where id = 1;
         created_at         
----------------------------
 2012-02-07 07:36:20.949641
(1 row)

và ActiveRecord cho biết điều này:

> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-02-07 07:36:20.949641000" 

Vì vậy, mọi thứ đều ở đó, bạn chỉ cần biết cách để xem nó.

Cũng lưu ý rằng ActiveRecord có thể sẽ cung cấp cho bạn ActiveSupport::TimeWithZone các đối tượng thay vì DateTime các đối tượng trừ DateTime bảo quản mọi thứ nữa:

> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-12-31 01:01:01.232323000" 

Hãy xem connection_adapters/column.rb trong nguồn ActiveRecord và kiểm tra xem string_to_time nào phương pháp nào. Chuỗi của bạn sẽ đi xuống fallback_string_to_time và điều đó bảo toàn số giây phân số gần như tôi có thể biết. Một điều gì đó kỳ lạ có thể đang xảy ra ở nơi khác, tôi sẽ không ngạc nhiên khi biết những điều kỳ lạ mà tôi đã thấy trong nguồn Rails, đặc biệt là phía cơ sở dữ liệu của mọi thứ. Tôi sẽ thử chuyển đổi các chuỗi thành các đối tượng bằng tay để ActiveRecord tránh xa chúng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng in không vừa với kích thước trang

  2. Cách đánh giá hiệu suất PostgreSQL bằng Sysbench

  3. PostgreSQL xóa tất cả nội dung

  4. Dòng lệnh PSQL của Windows:có cách nào cho phép đăng nhập không cần mật khẩu không?

  5. Xóa các hàng trùng lặp (không xóa tất cả các hàng trùng lặp)