반응형
Oracle Date Time in Where 절?
다음과 같은 SQL이 있습니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy')
-> 10개의 행과 TIME_CREATED = '26-JAN-2011'이 반환됩니다.
내가 이걸 하면 어떤 줄도 돌려받을 수 없어
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED = TO_DATE('26/JAN/2011','dd/mon/yyyy')
-> out보다 큼직한 것을 뺐다.
어떤 이유에서요?
예: TIME_CREATED에는 날짜와 시간이 포함되어 있습니다.사용하다TRUNC
시간을 제거합니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TRUNC(TIME_CREATED) = TO_DATE('26/JAN/2011','dd/mon/yyyy')
갱신:
아래 코멘트에서 Dave Costa가 지적한 바와 같이 Oracle은 이 컬럼의 인덱스를 사용할 수 없습니다.TIME_CREATED
존재하는 경우.이 문제가 없는 대체 접근법은 다음과 같습니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy')
AND TIME_CREATED < TO_DATE('26/JAN/2011','dd/mon/yyyy') + 1
다음을 사용하여 조회에 TIME 부분을 포함할 수도 있습니다.
SELECT EMP_NAME
, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED >= TO_DATE('26/JAN/2011 00:00:00', 'dd/mon/yyyy HH24:MI:SS');
다음 작업도 가능합니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TRUNC(TIME_CREATED) = DATE '2011-01-26'
왜냐하면DATE
Oracle의 열에도 시간 부분이 포함되어 있습니다.의 결과to_date()
함수는 시간이 로 설정된 날짜입니다.00:00:00
따라서 테이블 내의 어떤 행과도 일치하지 않을 수 있습니다.
다음을 사용해야 합니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE trunc(TIME_CREATED) = TO_DATE('26/JAN/2011','dd/mon/yyyy')
위에서 설명한 바와 같이 TRUNC를 사용하면 (TIME_CREATED에 인덱스가 있는 경우) 인덱스를 사용할 수 없습니다.이 문제를 피하기 위해 쿼리를 다음과 같이 구성할 수 있습니다.
SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED BETWEEN TO_DATE('26/JAN/2011','dd/mon/yyyy')
AND TO_DATE('26/JAN/2011','dd/mon/yyyy') + INTERVAL '86399' second;
86399는 하루의 초수보다 1초 적은 값입니다.
언급URL : https://stackoverflow.com/questions/6749369/oracle-datetime-in-where-clause
반응형
'itsource' 카테고리의 다른 글
플랫리스트를 다시 렌더링하는 방법 (0) | 2023.02.26 |
---|---|
Angular가 DOM에 스코프 업데이트를 추가한 후 메서드를 트리거하는 방법은 무엇입니까? (0) | 2023.02.26 |
Django에서 템플릿을 사용하지 않고 JSON을 반환하려면 어떻게 해야 하나요? (0) | 2023.02.18 |
약속 오류: 개체가 반응 자식 개체로 유효하지 않습니다. (0) | 2023.02.14 |
웹 팩을 사용하여 라이브러리 소스 맵을 로드하는 방법 (0) | 2023.02.14 |