복붙노트

[SQL] PostgreSQL를위한 시간에 타임 스탬프 차이

SQL

PostgreSQL를위한 시간에 타임 스탬프 차이

PostgreSQL를위한 TIMESTAMPDIFF () 해당이 있습니까?

내가 PostgreSQL의 간격을 얻기 위해 두 개의 타임 스탬프를 뺄 수있어. 난 그냥 INT으로 표시 시간에서 두 시간 소인의 차이를합니다.

이 같은 MySQL의에서이 작업을 수행 할 수 있습니다 :

TIMESTAMPDIFF(HOUR, links.created, NOW())

난 그냥 정수로 표현 시간에서 두 시간 소인의 차이를해야합니다.

솔루션은 나를 위해 작동합니다 :

SELECT "links_link"."created",
"links_link"."title",
(EXTRACT(EPOCH FROM current_timestamp - "links_link"."created")/3600)::Integer AS "age" 
FROM "links_link"

해결법

  1. ==============================

    1.첫 번째 일이 진열

    첫 번째 일이 진열

    EXTRACT(EPOCH FROM current_timestamp-somedate)/3600
    

    꽤 수 있지만 도로를 차단을 해제하지 않을 수 있습니다. 구간별로 분할 구간이 정의 된 경우 예뻐 될 수있다.

    편집 : 당신은 0보다 큰 중 하나를 사용 복근을 원하는 경우 또는 큰 (..., 0). 그렇다면 당신의 의도에 맞는.

    편집 ++ : 빼기 (자정) CURRENT_DATE에서 : 나는 나이를 사용하지 않은 이유는 문서를 인용, 하나의 인자로 나이입니다. 당신을 의미하는 것은 자정에 실행하지 않는 한 정확한 "시대"를하지 않습니다. 지금은 거의 여기 오전 1 있어요 :

    select age(current_timestamp);
           age        
    ------------------
     -00:52:40.826309
    (1 row)
    
  2. ==============================

    2.타임 스탬프는 PostgreSQL의 날짜보다 큰 필드를 가져 오기 :

    타임 스탬프는 PostgreSQL의 날짜보다 큰 필드를 가져 오기 :

    SELECT * from yourtable 
    WHERE your_timestamp_field > to_date('05 Dec 2000', 'DD Mon YYYY');
    

    PostgreSQL의에서 타임 스탬프에서 분을 빼기 :

    SELECT * from yourtable 
    WHERE your_timestamp_field > current_timestamp - interval '5 minutes'
    

    PostgreSQL의에서 타임 스탬프에서 시간을 빼기 :

    SELECT * from yourtable 
    WHERE your_timestamp_field > current_timestamp - interval '5 hours'
    
  3. ==============================

    3.마이클 Krelin의 대답은 가까이는 드문 상황에서 잘못 될 수 있기 때문에 완전히 안전하지 않습니다. 문제는 PostgreSQL의에서 간격 일광 절약 같은 것들에 관해서 컨텍스트를 필요가 없다는 것입니다. 간격은 월, 일, 초로 내부적으로 일을 저장합니다. 달은 문제가 될 수 있습니다 일 초 만 '일'을 사용하는 두 개의 타임 스탬프를 뺀 때문에이 경우에는 문제가되지 않습니다.

    마이클 Krelin의 대답은 가까이는 드문 상황에서 잘못 될 수 있기 때문에 완전히 안전하지 않습니다. 문제는 PostgreSQL의에서 간격 일광 절약 같은 것들에 관해서 컨텍스트를 필요가 없다는 것입니다. 간격은 월, 일, 초로 내부적으로 일을 저장합니다. 달은 문제가 될 수 있습니다 일 초 만 '일'을 사용하는 두 개의 타임 스탬프를 뺀 때문에이 경우에는 문제가되지 않습니다.

    당신의 뺄셈 일광 절약 변화 오버를 포함하는 경우, 특정 일 각각 23 또는 25 시간으로 간주 될 수 있습니다. 간격은 상징적 인 의미에서 전달 된 일의 양을 알고에 유용 계정으로이 걸릴 것입니다하지만, 전달 된 실제 시간의 잘못된 수를 줄 것이다. 간격에 신기원을 24 시간으로 만 곱 모든 일 것이다.

    전체 '짧은'하루가지나 다음 날의 추가 시간 예를 들어, 간격은 1 일 한 시간으로 기록됩니다. 시대로 변환 어떤 / 3600 25 시간입니다. 그러나 실제로 + 1시간 23시간 24 시간의 총 수 있어야합니다.

    안전한 방법입니다 그래서 :

    (EXTRACT(EPOCH FROM current_timestamp) - EXTRACT(EPOCH FROM somedate))/3600
    

    마이클은 자신의 후속 코멘트에서 언급 한 바와 같이, 당신은 또한 아마 정수 값으로 결과를 얻기 위해 사용 층 () 또는 원형 ()로 할 것입니다.

  4. ==============================

    4.당신은뿐만 아니라 타임 스탬프로 간격에서 "추출"또는 "date_part"기능을 사용할 수 있습니다,하지만 난 그게 당신이 원하는 것을 생각하지 않습니다. 예를 들어, '2 일 3 시간 정도의 간격 (3)을 제공한다. 그러나, 당신은 당신이 원하는 시간 요소로 '시대'를 지정하여 초 단위로 간격을 변환 할 수 있습니다 추출물 (의 시대 '이일 3 시간':: 간격은)는 다음 변환에 3600에 의해 분할 된 183,600 (반환 시간 초).

    당신은뿐만 아니라 타임 스탬프로 간격에서 "추출"또는 "date_part"기능을 사용할 수 있습니다,하지만 난 그게 당신이 원하는 것을 생각하지 않습니다. 예를 들어, '2 일 3 시간 정도의 간격 (3)을 제공한다. 그러나, 당신은 당신이 원하는 시간 요소로 '시대'를 지정하여 초 단위로 간격을 변환 할 수 있습니다 추출물 (의 시대 '이일 3 시간':: 간격은)는 다음 변환에 3600에 의해 분할 된 183,600 (반환 시간 초).

    - / 3600 추출물 (timestamp2 timestamp1에서 시대) : 그래서, 모두 함께이 퍼팅, 당신은 기본적으로 마이클의 답변을 얻을. 당신은 상관하지 않기 때문에하는 타임 스탬프, 당신은 아마 복근에 그 포장하려는 선행에 대해 :

    SELECT abs(extract(epoch from timestamp1 - timestamp2)/3600)
    
  5. ==============================

    5.타임 스탬프 사이의 시간 (초) 차이를 얻을 PostgreSQL을

    타임 스탬프 사이의 시간 (초) 차이를 얻을 PostgreSQL을

    SELECT (
        (extract (epoch from (
            '2012-01-01 18:25:00'::timestamp - '2012-01-01 18:25:02'::timestamp
                             )
                 )
        )
    )::integer
    

    이는 인쇄 :

    -2
    

    타임 스탬프 떨어져 이초이 때문이다. 시간을 얻기 위해 다시 (60)에 의해 분할 분을 얻기 위해 60 수와 분열을 가져 가라.

  6. ==============================

    6.이것은, 데이터베이스 기능을 활용하고자 많은 개발자에 미친 들리 겠지만

    이것은, 데이터베이스 기능을 활용하고자 많은 개발자에 미친 들리 겠지만

    그러나 철저한 문제, 생각 생성 및 PHP는 날짜 함수를 비교와 MySQL과 postgrsql 용 응용 프로그램을 버그를 수정 한 후, 나는 덜 SQL 두통과 간단한 가장 쉬운 방법은, 활용 아니라고 결론 (자신에 대한)에 왔어요 그들 중 어느.

    왜? 당신이 PHP와 같은 미들웨어 언어로 개발하는 경우 때문에, PHP는이 모든 기능을 가지고 있으며, 그들은 비교 정수로 응용 프로그램 ODE에서 구현하기가 쉽다. PostgreSQL의 타임 스탬프가 아닙니다 == UNIX TIMESTAMP와 MySQL의 UNIX TIMESTAMP는 데이터베이스 타임 스탬프를 사용하는 경우이 포트에 어렵게 도착 ...하지 PostgreSQL을 나 오라클 타임 스탬프입니다 ..

    그래서 그냥 정수가 아닌 타임 스탬프를 사용, 1970년 1월 1일 자정 이후의 초 수있다. 데이터베이스 타임 스탬프를 신경 쓰지 않았다. 및 사용 gmdate ()와 피할 시간대 문제에 GMT 시간으로 저장 다.

    당신 정렬, 검색하거나 응용 프로그램에서 다른 데이터, 월 또는 년 또는 요일, 또는 아무것도에서 하루를 비교해야하는 경우, 및 time_day, time_hour, time_seconds .. 또는 검색 할 인덱스에 wnat 당신이 무엇을위한 INTEGER 데이터 타입은보다 부드럽고 휴대용 데이터베이스에 만들 것입니다. 당신은 대부분의 경우 하나 개의 필드를 사용할 수 있습니다 : 정수 NULL NOT TIME_CREATED

    (데이터베이스 행에 더 많은 필드 내가 발견 한 것이이 솔루션의 유일한 단점, 그리고 많은 두통, 또는 커피 컵과 같은 나던 원인입니다 :)

    PHP는 날짜 함수는 날짜를 비교할 뛰어난 있습니다 하지만 MySQL의 또는 PostgreSQL을에, 날짜를 비교? 아니 .. 사용 정수 SQL 비교

    내가 그것을 삽입 기능에 CURRENT_TIMESTAMP를 사용하여 쉽게 보일 수 있습니다 알고 있습니다. 하아! 속지 마십시오.

    당신은 SESSION_TABLE에서 삭제하지 못할 WHERE 시간이 초기화 < '이일' 시간 intitialized는 PostgreSQL의 타임 스탬프는 경우. 하지만 당신은 할 수 있습니다 :

    SESSION_TABLE에서 삭제 time_initialized < '$ 어제'

    만큼 당신이 어제이었다 1970 년 이후 초 정수로 PHP에서 $ 어제를 설정한다.

    이것은 PostgreSQL의 SELECT 문에 타임 스탬프를 비교하는 것보다 세션 기록을 쉽게 가사입니다.

    SELECT 세 (), SELECT 추출물 (), 시간으로와 자신의 두통이다. 이것은 단지 내 의견이다.

    당신은 추가 할 수 있습니다, 빼기, <,>, 모든 PHP 날짜 개체

    _peter_sysko U4EA 네트웍스

  7. ==============================

    7.추출물 (세부터 시간 (현재 (), links.created)) 당신에게 시간 차이의 바닥 둥근 수를 제공합니다.

    추출물 (세부터 시간 (현재 (), links.created)) 당신에게 시간 차이의 바닥 둥근 수를 제공합니다.

  8. from https://stackoverflow.com/questions/1964544/timestamp-difference-in-hours-for-postgresql by cc-by-sa and MIT license