programing

문자열 ISO-8601 날짜를 오라클의 타임스탬프 데이터 형식으로 변환

lastcode 2023. 7. 21. 21:38
반응형

문자열 ISO-8601 날짜를 오라클의 타임스탬프 데이터 형식으로 변환

VARCHAR2 유형의 ISO-8601 날짜가 있는데, Oracle db에서 해당 문자열 날짜를 타임스탬프로 변환하려면 어떻게 해야 합니까?

날짜 예: "2014-09-12T 11:53:06+00:00"

아마도 다음과 같은 것일 수도 있지만 형식이 무엇인지는 잘 모르겠습니다.

SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', ????) FROM DUAL

날짜 형식 모델 요소는 Datetime 형식 모델 설명서에 나와 있습니다.

SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', 'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
FROM DUAL

TO_TIMESTAMP_TZ('2014-09-12T11:53:06+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
---------------------------------------------------------------------------
12-SEP-14 11.53.06.000000000 +00:00

고정된T문자 리터럴로 포함할 수 있습니다.

날짜 형식 모델에 다음 문자를 포함할 수 있습니다.

  • 하이픈, 슬래시, 쉼표, 마침표 및 콜론과 같은 구두점
  • 이중 따옴표로 둘러싸인 문자 리터럴

TZH나에게 구역 시간이고,TZM시간대 분입니다.나머지는 더 일반적인 모델 요소입니다.

Oracle DB 데이터베이스(19c)에 대해 쿼리를 수행하는 앱이 있었습니다.앱에서 ISO 8601 형식의 타임스탬프 매개 변수를 보내고 있었고 테이블에는 UTC 시간을 나타내는 타임스탬프를 저장하는 것으로 알려진 Oracle TIMESTAMP 유형(TIMEZONE 유형이 아닌)인 열이 있었습니다.

다음 쿼리가 효과가 있을 것으로 생각했지만 이중 따옴표로 둘러싸인 리터럴을 인식하지 못한 것 같습니다.

SELECT * FROM measurements
WHERE measID = '333'
AND measTime > to_timestamp('2020-11-19T05:00:00Z', 'YYYY-MM-DD"T"hh:mm:ss"Z"');
-- Doesn't Work
-- ORA-01810: format code appears twice
-- 01810. 00000 -  "format code appears twice"

다음은 저에게 효과가 있었습니다.

SELECT * FROM measurements
WHERE measID = '333'
AND measTime > SYS_EXTRACT_UTC(TO_UTC_TIMESTAMP_TZ('2020-11-19T05:00:00Z'));
-- Works

ISO 8601을 TIMESTAMP 유형으로 포맷하는 것이 Oracle 문서에서 즉시 명확하지 않았기 때문에 공유합니다.여기서 이 솔루션을 찾았습니다. https://oracle-base.com/articles/18c/to_utc_timestamp_tz-function-18c

언급URL : https://stackoverflow.com/questions/26671557/convert-string-iso-8601-date-to-oracles-timestamp-datatype

반응형