Oracle: 자정 전 현재 날짜(오늘)를 선택하는 방법은 무엇입니까?
Oracle을 사용하여 현재 날짜(예: SYSDATE)를 11:59:59로 선택하는 방법은 무엇입니까?
자정의 정의가 약간 모호할 수 있다는 점을 고려하십시오(한밤의 목요일은 목요일과 금요일 또는 수요일과 목요일을 가로지르는 것을 의미합니까?).
자정 전(1초 전) 현재 날짜(오늘)를 선택하려면 다음 문 중 하나를 사용할 수 있습니다.
SELECT TRUNC(SYSDATE + 1) - 1/(24*60*60) FROM DUAL
SELECT TRUNC(SYSDATE + 1) - INTERVAL '1' SECOND FROM DUAL;
기능:
- 하루를 합하면 다음과 같습니다.
SYSDATE
:SYSDATE + 1
이제 날짜는 내일입니다. - 날짜의 시간 부분 제거
TRUNC
이제 날짜는 내일 00:00입니다. - 날짜에서 1초 빼기:
- 1/(24*60*60)
또는- INTERVAL '1' SECOND FROM DUAL
이제 날짜는 오늘 11:59:59입니다.
참고 1: 날짜 간격을 확인하려면 아래의 @Allan 답변을 확인하십시오.
참고 2: 다른 하나를 사용할 수도 있습니다(읽는 것이 더 쉽습니다).
SELECT TRUNC(SYSDATE) + INTERVAL '23:59:59' HOUR TO SECOND FROM DUAL;
- 현재 날짜의 시간 부분을 제거합니다.
TRUNC
이제 날짜는 오늘 00:00입니다. - 시간 간격 추가
23:59:59
이제 날짜는 오늘 11:59:59입니다.
참고 3: 결과를 확인하려면 형식을 추가해야 합니다.
SELECT TO_CHAR(TRUNC(SYSDATE + 1) - 1/(24*60*60),'yyyy/mm/dd hh24:mi:ss') FROM DUAL
SELECT TO_CHAR(TRUNC(SYSDATE + 1) - INTERVAL '1' SECOND,'yyyy/mm/dd hh24:mi:ss') FROM DUAL
SELECT TO_CHAR(TRUNC(SYSDATE) + INTERVAL '23:59:59','yyyy/mm/dd hh24:mi:ss') FROM DUAL
개인적으로, 저는 자정 전에 1초를 사용하는 것을 싫어합니다.다른 것들 중에서도, 만약 당신이 그것을 사용한다면.timestamp
비교하는 값이 공백 사이에 있을 수 있습니다(예: 23:59:59.1).이러한 종류의 논리는 일반적으로 범위 조건에 대한 경계로 사용되므로 가능하면 "자정 전 1초 이하"보다는 "자정 미만"을 사용하는 것이 좋습니다.이를 위한 구문도 단순화됩니다.예를 들어, "오늘"을 나타내는 시간 범위를 가져오려면 다음 중 하나를 사용할 수 있습니다.
date_value >= trunc(sysdate) and date_value < trunc(sysdate) + 1
date_value >= trunc(sysdate) and date_value < trunc(sysdate) + interval '1' day
사용하는 것보다 조금 더 번거롭습니다.between
하지만 고려하고 있는 범위를 벗어나는 값은 절대로 얻을 수 없습니다.
진짜 모호성은 아마도 윤초와 일광 절약일 것입니다(하지만 자정에 바뀌는 경우가 있는지는 모르겠습니다).
어쨌든, 일반적인 경우에는 다음과 같은 해결책이 거의 없습니다.
-- all of these will produce a `DATE` result:
SELECT TRUNC(SYSDATE+1)-1/86400 FROM DUAL;
SELECT TRUNC(SYSDATE+1) - INTERVAL '1' SECOND FROM DUAL;
SELECT TRUNC(SYSDATE) + INTERVAL '23:59:59' HOUR TO SECOND FROM DUAL;
타임스탬프를 사용하는 경우 몇 가지 이상한 점이 있습니다.
-- those two will produce a `DATE` *too*, not a `TIMESTAMP`:
SELECT TRUNC(SYSTIMESTAMP) + INTERVAL '23:59:59' HOUR TO SECOND FROM DUAL;
SELECT TO_TIMESTAMP(TRUNC(SYSTIMESTAMP+1))-1/86400 FROM DUAL;
언급URL : https://stackoverflow.com/questions/26182524/oracle-how-to-select-current-date-today-before-midnight
'programing' 카테고리의 다른 글
안드로이드에서 그라데이션 배경을 만드는 방법 (0) | 2023.07.29 |
---|---|
어레이, 해시 테이블 및 사전을 생성하시겠습니까? (0) | 2023.07.29 |
도커 - 컨텍스트를 준비할 수 없음: 도커 파일 경로의 심볼 링크를 평가할 수 없음: GetFileAttributes전 (0) | 2023.07.29 |
판다 데이터 프레임의 열 순서 설정 (0) | 2023.07.29 |
Angular 4 오류: HttpClient에 대한 공급자 없음 (0) | 2023.07.29 |