[SQL] 오라클 SQL에서 날짜 비교
SQL오라클 SQL에서 날짜 비교
나는 'CREATION_DATE'나는 6 개 기록을 얻고에 따라 별개의 기록을 위해 내 테이블을 쿼리하고 때 나는, 유형 '날짜'입니다 열 'CREATION_DATE'를 가지고 :
select distinct creation_date from test_table;
산출:
06-APR-11
06-APR-11
28-MAR-11
06-APR-11
06-APR-11
18-MAR-11
이 출력 6 년 4 월 내가 내 쿼리에 별개의 사용도 4 번 표시됩니다. 또한 나는 2011년 4월 6일 내가 어떤 결과를 얻고 있지 않다의 CREATION_DATE와 일치하는 모든 레코드를 찾기 위해 노력하고 있습니다 때. 다음은 내 쿼리는 다음과 같습니다
select * from test_table where creation_date = to_date('06-APR-11','DD-MON-YY');
나는이 두 쿼리에 잘못을하고있는 중이 야 어디 제발 도와주세요.
해결법
-
==============================
1.문제는 두 가지이다. 첫째 날짜는 거의 확실히 시간을 가지고있다. TO_DATE ('06 -3은-11 ','DD-MON-YY ')가 2011년 3월 6일 00:00:00 동등하다. 당신이)합니다 (TRUNC를 사용하는 경우 당신이 그 일에 대한 모든 것을 볼 수있을 것입니다 기능 :
문제는 두 가지이다. 첫째 날짜는 거의 확실히 시간을 가지고있다. TO_DATE ('06 -3은-11 ','DD-MON-YY ')가 2011년 3월 6일 00:00:00 동등하다. 당신이)합니다 (TRUNC를 사용하는 경우 당신이 그 일에 대한 모든 것을 볼 수있을 것입니다 기능 :
select * from test_table where trunc(creation_date) = to_date('06-MAR-11','DD-MON-YY');
나는 월의 날짜 형식 모델을 사용하지 않을 것입니다. 여기 설명으로는 지역 및 설정에 따라 달라집니다. 대신 숫자 월 형식 모델을 사용하는 것이 안전합니다. 마찬가지로, 항상 올해의 일부로서 세기를 지정합니다.
where trunc(creation_date) = to_date('06-03-YY11','DD-MM-YYYY');
두 번째 문제는 거의 확실히 당신의 NLS_DATE_FORMAT이다; 당신이 4 동일한 날짜를 볼 이유 때문에, 계정에 시간을 갖지 것으로 보인다. 이것은 단지 데이터가 저장되어 있지 어떻게 표시되는 방식을 제어합니다.
당신은 같은 사용하여이 뭔가를 변경할 수 있습니다 :
ALTER SESSION SET NLS_DATE_FORMAT = "DD/MM/YYYY HH24:MI:SS"
나는 다음을 사용하여 테스트 환경을 설정하는 경우 :
create table test_table ( creation_date date ); insert into test_table values ( sysdate ); insert into test_table values ( sysdate - 0.01 ); alter session set nls_date_format = "YYYY/MM/DD";
당신은 (SYSDATE는 않습니다하지만) 시간은 포함되지 않습니다 반환 된 데이터를 볼 수 있습니다 :
SQL> select * from test_table; CREATION_D ---------- 2013/04/12 2013/04/12
NLS_DATE_FORMAT을 변경하면 동일한 SELECT를 수행, 당신은 지금 시간 구성 요소를 얻을 :
SQL> alter session set nls_date_format = "YYYY/MM/DD HH24:MI:SS"; Session altered. SQL> select * from test_table; CREATION_DATE ------------------- 2013/04/12 12:48:41 2013/04/12 12:34:17
혼자 오늘의 날짜를 선택하려고 할 때 마지막 행이 반환되지 않습니다 :
SQL> select * 2 from test_table 3 where creation_date = to_date('20130412','yyyymmdd'); no rows selected
TRUNC를 사용하지만, () 다시 모든 행을 얻을 필드의 날짜 부분을에 비교 :
SQL> select * 2 from test_table 3 where trunc(creation_date) = to_date('20130412','yyyymmdd'); CREATION_DATE ------------------- 2013/04/12 12:48:41 2013/04/12 12:34:17
실제로 당신이 고유 한 날짜를 원하는 경우가 TRUNC () 함수를 다시 사용할 수 있습니다, 두 번째 질문에 대답하려면 :
select distinct trunc(creation_date) from test_table
-
==============================
2.날짜 데이터 형식 저장 (세기 포함) 년, 월, 일, 시간, 분, 및 (자정 이후) 초. 또한이를 고려해야합니다.
날짜 데이터 형식 저장 (세기 포함) 년, 월, 일, 시간, 분, 및 (자정 이후) 초. 또한이를 고려해야합니다.
from https://stackoverflow.com/questions/15970277/comparing-with-date-in-oracle-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MS SQL Server의 누적 총 [중복] (0) | 2020.05.30 |
---|---|
[SQL] 그것은 단일 "DESC"여러 테이블의 구조를 확인할 수있다. (0) | 2020.05.30 |
[SQL] PHP는 에코 내부 에코 (0) | 2020.05.30 |
[SQL] MySQL의 계층 구조 자체 조인, 모든 하위 범주를 검색 (0) | 2020.05.30 |
[SQL] 오류 준비된 문을 저장 프로 시저를 호출하려고 (0) | 2020.05.30 |