[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.@Nicolai는 캐스팅 이유와 조건이 데이터에 대한 거짓에 대한 올바른 것입니다. 난 당신이 올바른 입력 문자열에 날짜 조작을 방지하기 원하기 때문에 당신이 첫 번째 양식을 선호하는 것 같아요? 당신은 두려워 할 필요가 없습니다
@Nicolai는 캐스팅 이유와 조건이 데이터에 대한 거짓에 대한 올바른 것입니다. 난 당신이 올바른 입력 문자열에 날짜 조작을 방지하기 원하기 때문에 당신이 첫 번째 양식을 선호하는 것 같아요? 당신은 두려워 할 필요가 없습니다
SELECT * FROM table WHERE update_date >= '2013-05-03'::date AND update_date < ('2013-05-03'::date + '1 day'::interval);
-
==============================
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.범위 유형을 사용합니다. 사용자가 날짜를 입력하면 :
범위 유형을 사용합니다. 사용자가 날짜를 입력하면 :
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.날짜와 비교 날짜 변환을 사용합니다 : 이 시도:
날짜와 비교 날짜 변환을 사용합니다 : 이 시도:
select * from table where TO_DATE(to_char(timespanColumn,'YYYY-MM-DD'),'YYYY-MM-DD') = to_timestamp('2018-03-26', 'YYYY-MM-DD')
from https://stackoverflow.com/questions/19469154/how-to-compare-dates-in-datetime-fields-in-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL, 포스트 그레스 OID를, 그들이 무엇이고 왜 유용? (0) | 2020.07.20 |
---|---|
[SQL] 널 (NULL) 열 또는 별도의 테이블을 통해 키 / 값 테이블을 사용하는 [단점은 무엇입니까? (0) | 2020.07.20 |
[SQL] 데이터베이스 / SQL : 어떻게 위도 / 경도 데이터를 저장하는 방법? (0) | 2020.07.20 |
[SQL] 어떻게 SQL을 통해 PostgreSQL 데이터베이스에 연결된 활성 사용자를받을 수 있나요? (0) | 2020.07.20 |
[SQL] 어떻게 / 죽일 즉시 긴 SQL 쿼리를 중지? (0) | 2020.07.20 |