복붙노트

[SQL] 어떻게 PostgreSQL을에서 날짜 필드에 날짜를 비교?

SQL

어떻게 PostgreSQL을에서 날짜 필드에 날짜를 비교?

PostgreSQL은 (창에서 버전 9.2.4)에서 날짜 사이 비교했을 때 나는 이상한 시나리오에 직면하고있다. 내 테이블의 열은 '시간대없이 타임 스탬프'유형 UPDATE_DATE 말할 수 있습니다. 클라이언트는 날짜 (즉 : 2013년 5월 3일)와 함께이 필드를 통해 검색 할 수 있습니다 시간 또는 날짜 (즉 : 2013년 5월 3일 12시 20분 0초). 이 항목은 현재의 모든 행에 대한 타임 스탬프 값을 가지며, 시간 부분에 동일한 날짜 부분 (2013년 5월 3일)하지만 차이가있다.

나는이 칼럼을 통해 비교있을 때, 나는 다른 결과를 얻고있다. 다음과 같이 :

select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-03' -> No results

select * from table where update_date >= '2013-05-03' AND update_date < '2013-05-03' -> No results

select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-04' -> results found

select * from table where update_date >= '2013-05-03' -> results found

내 질문은 내가 가능한 첫 번째 쿼리가 결과를 얻을 수있는 방법을, 나는 3 쿼리가 작동하는 이유를 의미하지만 첫 번째?

이와 캔 누구의 도움 나? 미리 감사드립니다.

해결법

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

    1.@Nicolai는 캐스팅 이유와 조건이 데이터에 대한 거짓에 대한 올바른 것입니다. 난 당신이 올바른 입력 문자열에 날짜 조작을 방지하기 원하기 때문에 당신이 첫 번째 양식을 선호하는 것 같아요? 당신은 두려워 할 필요가 없습니다

    @Nicolai는 캐스팅 이유와 조건이 데이터에 대한 거짓에 대한 올바른 것입니다. 난 당신이 올바른 입력 문자열에 날짜 조작을 방지하기 원하기 때문에 당신이 첫 번째 양식을 선호하는 것 같아요? 당신은 두려워 할 필요가 없습니다

    SELECT *
    FROM table
    WHERE update_date >= '2013-05-03'::date
    AND update_date < ('2013-05-03'::date + '1 day'::interval);
    
  2. ==============================

    2.동일한 유형에 UPDATE_DATE> = '2013년 5월 3일'포스트 그레스 캐스트의 값을 비교하면 값을 비교합니다. 당신의 '2013년 5월 3일'그래서 '는 2013년 5월 3일 0시 0분 0초'로 주조되었다.

    동일한 유형에 UPDATE_DATE> = '2013년 5월 3일'포스트 그레스 캐스트의 값을 비교하면 값을 비교합니다. 당신의 '2013년 5월 3일'그래서 '는 2013년 5월 3일 0시 0분 0초'로 주조되었다.

    그래서 UPDATE_DATE = 대한 '2013년 5월 3일 14시 45분 0초'당신의 표현이 될 것입니다 :

    '2013-05-03 14:45:00' >= '2013-05-03 00:00:00' AND '2013-05-03 14:45:00' <= '2013-05-03 00:00:00'
    

    이것은 항상 false입니다

    현재까지이 문제 캐스트 UPDATE_DATE를 해결하려면

    select * from table where update_date::date >= '2013-05-03' AND update_date::date <= '2013-05-03' -> Will return result
    
  3. ==============================

    3.범위 유형을 사용합니다. 사용자가 날짜를 입력하면 :

    범위 유형을 사용합니다. 사용자가 날짜를 입력하면 :

    select *
    from table
    where
        update_date
        <@
        tsrange('2013-05-03', '2013-05-03'::date + 1, '[)');
    

    사용자가 타임 스탬프를 입력하면 당신은 : 날짜 + 1 부분이 필요하지 않습니다

    http://www.postgresql.org/docs/9.2/static/rangetypes.html

    http://www.postgresql.org/docs/9.2/static/functions-range.html

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

    4.날짜와 비교 날짜 변환을 사용합니다 : 이 시도:

    날짜와 비교 날짜 변환을 사용합니다 : 이 시도:

    select * from table 
    where TO_DATE(to_char(timespanColumn,'YYYY-MM-DD'),'YYYY-MM-DD') = to_timestamp('2018-03-26', 'YYYY-MM-DD')
    
  5. from https://stackoverflow.com/questions/19469154/how-to-compare-dates-in-datetime-fields-in-postgresql by cc-by-sa and MIT license