Rails 3 DateTime-Vergleich mit Datum in einer ActiveRecord-Abfrage

7

Ich versuche, ein Modell nach Daten zu suchen, die einem bestimmten Datum entsprechen, und den Zeitstempel wegzulassen. In Rails konnte ich dies einfach als DateTime.to_date == somedate ausführen, aber ich denke nicht, dass es in SQL so einfach zu formulieren ist, wo ich die Methode to_date nicht auf eine ganze Spalte wie created_at anwenden könnte:

%Vor%

Anfangs dachte ich, dass ich, weil ich eine postgresql-Datenbank verwende, einfach die psql-Syntax verwenden könnte, aber ich überlasse es lieber ActiveRecord, um zu entscheiden, welche SQL am geeignetsten ist und meinen Code von Datenbankanbietern unabhängig zu halten. Ist dies ohne zusätzliche Plugins oder Edelsteine ​​möglich?

    
Noz 03.12.2012, 18:30
quelle

4 Antworten

4

Versuchen Sie created_at >= some_day_with_00:00:00 timestamp and create_at < some_day_plus_one_with_00:00:00 timestamp

    
Tad 03.12.2012, 18:52
quelle
9

Ich würde etwas wie ...

tun %Vor%

Dies würde alle created_at Daten zwischen Mitternacht am someday und someday + 1 erfassen. Dies ist inklusive (also würde es einen Foo beinhalten, der am +1 Tag um Mitternacht erstellt wurde), aber es kann "gerade gut genug" für Ihre Bedürfnisse sein, ohne Zeitstempel zu stören.

Wenn es nett wäre, würde ich es als scope

einpacken %Vor%

Also

%Vor%

ist gut lesbar.

    
razorhead 04.12.2012 10:26
quelle
9
Die

DateTime-Klasse verfügt über zwei nützliche Methoden: beginning_of_day und end_of_day .

Für diesen Fall, in dem Sie ein Date-Objekt haben, könnten Sie Folgendes tun:

%Vor%

Beachten Sie, dass Sie das Date-Objekt in ein DateTime-Objekt umwandeln müssen

    
MARC.RS 02.04.2014 07:42
quelle
7

Mit dem Umfang:

%Vor%

Verwenden:

%Vor%     
Cristian Cepeda 10.11.2014 05:05
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

In Java gibt es eine nette Bibliotheksklasse java.util.Stack, die Push- und Pop-Methoden implementiert. Gibt es in Ziel C etwas Ähnliches?

Ich habe nur MutableArray gefunden. Es scheint komisch, dass ich so ein grundlegendes Ding wie einen Stapel implementieren muss, es muss etwas wie "NSStack", "NSQueue" und andere ähnliche Sachen geben.

    
___ answer11221979 ___

soweit ich weiß, gibt es nichts wie stack und queue im sdk.
Es gibt ein Beispiel für die Implementierung der Warteschlange
hier .

    
___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die verwandten Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ tag123nsmutablearray ___ NSMutableArray repräsentiert ein modifizierbares (veränderbares) Array-Objekt für Cocoa und Cocoa Touch. Es ist verfügbar in OS X v10.0 und höher ___ answer11223120 ___

Niemand sollte es vergessen Objective-C bietet eine ziemlich schöne Variante: Objective-C ++. Und die C ++ - Standardbibliothek bietet die Datenstrukturen, die Sie brauchen, getestet, debuggt, stabil und so schnell wie möglich. Am besten, sie arbeiten perfekt mit ARC. Bestest, Sie können sogar zwischen %code% oder %code% Zeigern wählen, wenn Sie es fühlen.

Schauen Sie sich %code% und %code% an.

Das heißt, %code% funktioniert perfekt für Stacks: %code% , %code% und %code% werden den Job mit guter Leistung gut machen.

C ++ kann ausführlich sein. Schrecklich ausführlich. Aber es hat auch eine gewisse Eleganz hier und da und einige sehr mächtige Konstrukte. Einige Teile der Standardbibliothek glänzen wirklich, und die Datenstrukturen gehören zu den Perlen, wenn die Alien-Syntax beherrscht wird. Es kann trotzdem mit ein paar typedefs versteckt werden.

    
___ answer27750785 ___

Sie (wie ich) müssen sich vielleicht Sorgen machen, dass die Verwendung von NSMutableArray aus der Warteschlange entfernt wird, weil Sie das erste Objekt im NSMutableArray entfernen müssen, und das Entfernen bewirkt eine Verschiebung aller Objekte im Array. Das ist jedoch nicht notwendig, basierend auf dem Test, den ich hier gemacht habe: Für ein NSMutableArray, das 100000 Objekte enthält, entferne alle Objekte, indem du kontinuierlich das erste entfernst Das Objekt ist 100 ms langsamer als das fortlaufende Entfernen des letzten Objekts. Ich habe auch verglichen, ein NSMutableArray mit zwei NSMutableArrays zu verwenden. Obwohl es möglich ist, das Entfernen des ersten Objekts durch Verwendung von zwei NSMutableArrays, die als zwei Stapel verwendet werden, zu vermeiden, ist die Double-Stack-Lösung tatsächlich langsamer.

    
___ tag123stack ___ Ein Stapel ist ein LIFO-abstrakter Datentyp und eine letzte Datenstruktur. Eine häufige Verwendung von Stapeln besteht darin, Unterroutinenargumente zu speichern und Adressen zurückzugeben. ___ answer11221959 ___

Ich habe eine Stack-Implementierung hier . Es verwendet %code% , um die schmutzige Arbeit zu erledigen, die wirklich nicht so schlecht ist. Aber in die Foundation ist nichts eingebaut.

    
___