example - timestamp postgresql ejemplo
De Now() a Current_timestamp en Postgresql (5)
En mysql puedo hacer esto:
SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100
ahora en postgresql estoy usando esta consulta:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
pero obtengo este error:
operator does not exist: timestamp with time zone - integer
¿Cómo puedo resolver?
Aquí está lo que dicen los documentos de MySQL sobre NOW()
:
Devuelve la fecha y la hora actuales como un valor en formato ''AAAA-MM-DD HH: MM: SS'' o AAAAMMDDHHMMSS.uuuuuu, dependiendo de si la función se utiliza en una cadena o en un contexto numérico. El valor se expresa en la zona horaria actual.
mysql> SELECT NOW();
-> ''2007-12-15 23:50:26''
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
Ahora, ciertamente puedes reducir tu fecha inteligente a algo menos ...
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;
Pero, eso sería una muy mala idea, lo que necesita comprender es que los tiempos y las fechas no son estúpidos números no formateados, sino que son de su propio tipo con su propio conjunto de funciones y operators
Así que la hora de MySQL esencialmente le permite tratar NOW()
como un tipo más tonto, o anula +
para hacer una presunción que no puedo encontrar en los documentos de MySQL. En cualquier caso, es probable que desee ver los tipos de date
e interval
en la página.
Aquí hay un ejemplo ...
select * from tablename where to_char(added_time, ''YYYY-MM-DD'') = to_char( now(), ''YYYY-MM-DD'' )
added_time es un nombre de columna que convertí a char para coincidir
También puedes usar now()
en Postgres. El problema es que no puede sumar / restar enteros de timestamp
o timestamptz
. Puede hacer lo que Mark Byers sugiere y restar un intervalo, o usar el tipo de date
que le permite agregar / sustraer números enteros
SELECT now()::date + 100 AS date1, current_date - 100 AS date2
Use un intervalo en lugar de un número entero:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL ''100 days''
select * from table where column_date > now()- INTERVAL ''6 hours'';