In MySQL kann ich dies tun:
SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100
jetzt in postgresql benutze ich diese Abfrage:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
aber ich bekomme diesen Fehler:
operator does not exist: timestamp with time zone - integer
Wie kann ich lösen?
sql
datetime
postgresql
xRobot
quelle
quelle
now()::date + 100
darstellt. Gibt es einen Fall, in dem Ganzzahlmathematik gegenüber INTERVALLMathematik erforderlich ist?Hier ist ein Beispiel ...
select * from tablename where to_char(added_time, 'YYYY-MM-DD') = to_char( now(), 'YYYY-MM-DD' )
added_time ist ein Spaltenname, den ich zur Übereinstimmung in char konvertiert habe
quelle
added_time
Spalte nicht verwendet werden . Natürlich können Sie einen Funktionsindex erstellen, der into_char(added_time, 'YYYY-MM-DD')
diesem Fall als Overhead bezeichnet wird.Folgendes sagen die MySQL-Dokumente
NOW()
:mysql> SELECT NOW(); -> '2007-12-15 23:50:26' mysql> SELECT NOW() + 0; -> 20071215235026.000000
Jetzt können Sie Ihr Smart Date sicherlich auf etwas weniger reduzieren ...
SELECT ( date_part('year', NOW())::text || date_part('month', NOW())::text || date_part('day', NOW())::text || date_part('hour', NOW())::text || date_part('minute', NOW())::text || date_part('second', NOW())::text )::float8 + foo;
Aber das wäre eine wirklich schlechte Idee. Was Sie verstehen müssen, ist, dass Zeiten und Daten keine dummen, nicht formulierten Zahlen sind, sondern ein eigener Typ mit eigenen Funktionen und Operatoren
Mit der MySQL-Zeit können Sie also im Wesentlichen
NOW()
einen dümmeren Typ behandeln oder+
eine Vermutung überschreiben , die ich in den MySQL-Dokumenten nicht finden kann. In jedem Fall möchten Sie sich wahrscheinlich diedate
undinterval
Typen in pg ansehen .quelle
select * from table where column_date > now()- INTERVAL '6 hours';
quelle