Oracle: 날짜 시간에서 밀리초 차감
나는 그것이 정말 간단하다고 생각했지만 그렇지 않습니다.
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY')
- 1/(24*50*60*1000) data
FROM dual;
그것은 단순히 작동하지 않습니다.
기타 세부 정보:
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -
NUMTODSINTERVAL(1/(24*50*60*1000),'HOUR') data
FROM dual;
작동하지 않습니다.
오른쪽은.
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -
NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR') data
FROM dual;
왜요? 어떻게 작동하죠?
리터럴로 표현된 시간을 더하거나 빼는 데에는 INTERVAL을 사용할 수 있습니다.
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY')
- INTERVAL '0.001' SECOND
FROM dual;
또한 날짜 및 시간 리터럴을 표현하고 다양한 데이터베이스별 변환 기능의 사용을 피하는 표준 방법이 있습니다.
SELECT TIMESTAMP '2012-10-08 00:00:00'
- INTERVAL '0.001' SECOND DATA
FROM dual;
원래 질문의 경우 하루의 시간 부분이 분수 일 단위로 저장됩니다.그래서 1초는:
1 / (hours in day * minutes in hour * seconds in a minute)
밀리초를 얻으려면 1000으로 나눕니다.
1 / (24 * 60 * 60 * 1000)
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/(24*50*60*1000),'HOUR') data
FROM dual;
산출량
DATA
---------------------------------
09/AUG/12 11:59:59.999950000 PM
1 row selected.
위에 게시된 답변은 날짜에서 1/10 밀리초를 뺀 것입니다.당신이 원하는 것은 다음과 같습니다.
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY')-NUMTODSINTERVAL(1/1000,'SECOND')
FROM dual;
출력:
DATA
---------------------------------------------------------------------------
09-AUG-12 11.59.59.999000000 PM
^^^
|||
tenths|thousandths
|
hundredths
다음과 같은 것들NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')
24*25 = 600 때문에 작동하는 것처럼 보입니다.그러나 시간의 1/(600*60*1000)은 1밀리초가 아니라 1밀리초의 10분의 1이기 때문에 이 수치는 잘못된 것입니다.'HOUR'을 사용하려면NUMTODSINTERVAL()
사용해야 합니다.1/(60*60*1000)
(1시간에 204분, 1분에 60초, 1초에 1000ms).
정확합니다(밀리초는 1000분의 1초).
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/1000,'SECOND') data FROM dual;
DATA
-----------------------------
09-AUG-12 23.59.59.999000000
다른 코드가 작동하지 않는 이유는 1밀리초를 올바르게 계산하지 않았기 때문입니다.1시간을 60으로 나누면 분이 되고 다시 60에서 60초가 되고 1000으로 나누면 밀리초가 됩니다. 따라서 HOUR을 간격으로 사용해야 할 경우 다음과 같습니다.
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/(60*60*1000),'HOUR') as data FROM dual;
DATA
---------------------------------------------------------------------------
09-AUG-12 23.59.59.999000000
select TO_CHAR(TO_TIMESTAMP('10.05.2012', 'DD.MM.YYYY') -
NUMTODSINTERVAL(1/1000, 'SECOND'), 'DD.MM.YYYY HH24:MI:SS:FF3') Res
from dual;
RES
-----------------------------
09.05.2012 23:59:59.999
언급URL : https://stackoverflow.com/questions/11900470/oracle-subtract-millisecond-from-a-datetime
'source' 카테고리의 다른 글
오라클의 이진 필드(블롭)에 대한 조건(예: "유사") (0) | 2023.06.29 |
---|---|
TypeScript 매개 변수 유형 반환 (0) | 2023.06.29 |
SSMS 내에서 .SQL 파일 집합을 실행하려면 어떻게 해야 합니까? (0) | 2023.06.29 |
MongoDB - 오류: 저장하기 전에 문서에 _id가 있어야 합니다. (0) | 2023.06.29 |
MATLAB 코드를 Python으로 변환하는 도구 (0) | 2023.06.29 |