sql >> Database teknologi >  >> RDS >> PostgreSQL

Millisekunder opløsning af DateTime i Ruby

ActiveRecord bør bevare den fulde præcision fra databasen, du ser bare ikke ordentligt på den. Brug strftime og %N formater for at se brøkdelen af ​​sekunder. For eksempel psql siger dette:

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

og ActiveRecord siger dette:

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

Så alt er der, du skal bare vide, hvordan du ser det.

Bemærk også, at ActiveRecord sandsynligvis vil give dig ActiveSupport::TimeWithZone objekter i stedet for DateTime objekter, men DateTime bevarer alt også:

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

Tag et kig på connection_adapters/column.rb i ActiveRecord-kilden og tjek hvad string_to_time er metode gør. Din streng ville gå ned ad fallback_string_to_time sti, og det bevarer brøkdele af sekunder så tæt på, som jeg kan se. Noget mærkeligt kunne foregå andre steder, jeg ville ikke blive overrasket i betragtning af de mærkelige ting, jeg har set i Rails-kilden, især databasesiden af ​​tingene. Jeg ville prøve at konvertere strengene til objekter i hånden, så ActiveRecord holder hænderne væk fra dem.



  1. Nummerseriegenerator-udfordringsløsninger – del 5

  2. Hvad er standardpræcision og skala for et tal i Oracle?

  3. Er det muligt at forespørge en træstrukturtabel i MySQL i en enkelt forespørgsel, til enhver dybde?

  4. Hvorfor bruge join i MySQL-forespørgsler i stedet for hvor?