IT TIP

Now ()에서 Postgresql의 Current_timestamp로

itqueen 2020. 11. 19. 22:44
반응형

Now ()에서 Postgresql의 Current_timestamp로


mysql에서는 다음과 같이 할 수 있습니다.

SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100

이제 postgresql에서이 쿼리를 사용하고 있습니다.

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100

하지만이 오류가 발생합니다.

operator does not exist: timestamp with time zone - integer

어떻게 해결할 수 있습니까?


정수 대신 간격을 사용하십시오.

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'

now()Postgres 에서도 사용할 수 있습니다 . 문제는 timestamp또는 에서 정수를 더하거나 뺄 수 없다는 것 timestamptz입니다. Mark Byers가 제안한대로 간격을 빼거나 date정수를 더하거나 뺄 수 있는 유형을 사용할 수 있습니다.

SELECT now()::date + 100 AS date1, current_date - 100 AS date2

다음은 MySQL 문서가 말하는 내용입니다 NOW().

함수가 문자열 또는 숫자 컨텍스트에서 사용되는지 여부에 따라 현재 날짜 및 시간을 'YYYY-MM-DD HH : MM : SS'또는 YYYYMMDDHHMMSS.uuuuuu 형식의 값으로 반환합니다. 값은 현재 시간대로 표시됩니다.

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000

이제 스마트 데이트를 더 적은 것으로 확실히 줄일 수 있습니다.

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;

그러나 그것은 정말 나쁜 생각 일 것입니다. 이해해야 할 것은 시간과 날짜가 형식이 지정되지 않은 어리석은 숫자가 아니라 자체 함수연산자 세트 가있는 자체 유형이라는 것 입니다.

따라서 MySQL 시간을 사용하면 기본적 NOW()으로 멍청한 유형으로 취급 하거나 +MySQL 문서에서 찾을 수없는 가정을 재정의 합니다. 어쨌든 pg dateinterval유형 을보고 싶을 것입니다 .


여기에 예가 있습니다 ...

select * from tablename where to_char(added_time, 'YYYY-MM-DD')  = to_char( now(), 'YYYY-MM-DD' )

added_time은 일치를 위해 char로 변환 한 열 이름입니다.


select * from table where column_date > now()- INTERVAL '6 hours';

참고 URL : https://stackoverflow.com/questions/2993468/from-now-to-current-timestamp-in-postgresql

반응형