now example ejemplo date_trunc date_part sql datetime postgresql

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'';