오라클 날짜에 :XSD 날짜 XS 변환 : 날짜 _ 시간을 나는이 형식에서 날짜를 변환 할 필요가
2002-10-10T12 : 00 : 00-05 : 00 (XS : dateTime으로 정의 XML로)
에서 오라클 날짜.
PL/SQL : to_date ('date here', 'yyyymmdd')에서 이것을 사용하는 데 시간대 정보를 유지하면서 변환하는 방법이 있습니까?
감사
오라클 날짜에 :XSD 날짜 XS 변환 : 날짜 _ 시간을 나는이 형식에서 날짜를 변환 할 필요가
2002-10-10T12 : 00 : 00-05 : 00 (XS : dateTime으로 정의 XML로)
에서 오라클 날짜.
PL/SQL : to_date ('date here', 'yyyymmdd')에서 이것을 사용하는 데 시간대 정보를 유지하면서 변환하는 방법이 있습니까?
감사
오라클 날짜 시간대 정보가 없습니다. 대신 TIMESTAMP 데이터 유형을 사용해야합니다. XSD를 표기에 T의 까다로운 문제가있다,
SQL> desc tz
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
TS TIMESTAMP(6) WITH TIME ZONE
TNOW TIMESTAMP(6) WITH TIME ZONE
SQL> insert into tz
2 values (1
3 , to_timestamp_tz('2002-10-10 12:00:00-05:00'
4 , 'YYYY-MM-DD HH24:MI:SSTZH:TZM')
5 , systimestamp)
6/
1 row created.
SQL> select * from tz
2/
ID
----------
TS
---------------------------------------------------------------------------
TNOW
---------------------------------------------------------------------------
1
10-OCT-02 12.00.00.000000 -05:00
23-AUG-10 17.37.06.502000 +01:00
SQL>
참고 :
는이 같은 것을 사용할 수 있습니다. 이는 오라클에서 유효한 형식이 아니기 때문에 ORA-01858
예외를 발생시킵니다. 나는 해결책이 있다고 확신하지만, 현재 그것은 나를 도망 간다. 밥 같이
잘 하나의 해결 방법은, SUBSTR() 함수 STO 분할은 타임 스탬프의 두 부분으로 열 적용하는 것이다. 그러나 더 우아한 방법이 있어야합니다.
SQL> insert into tz
2 values (2
3 , to_timestamp_tz(translate('2003-10-10T12:00:00-05:00', 'T', ' ')
4 , 'YYYY-MM-DD HH24:MI:SSTZH:TZM')
5 , systimestamp)
6/
1 row created.
SQL> select * from tz
2/
ID
----------
TS
---------------------------------------------------------------------------
TNOW
---------------------------------------------------------------------------
1
10-OCT-02 12.00.00.000000 -05:00
23-AUG-10 17.37.06.502000 +01:00
2
10-OCT-03 12.00.00.000000 -05:00
23-AUG-10 17.53.37.113000 +01:00
SQL>
을하지만 오라클이있는 모든 노력을 제공 : 아마 "우아한"로 자격이되지 않습니다하지만이 문자열의 우리가 대체 기능을 사용할 수 있습니다
은 성가신 T 없애 XMLDB에 넣으면 오히려 정돈 된 해결책이 없다는 것을 성가 시게한다.
는 "나는 당신이 -05 얻을 방법을 이해 해달라고 :. 00"
원본 샘플에는 'YYYY-MM-DD HH24:MI:SS-TZH:TZM'
의 형식 마스크를 사용합니다. 그러면 -
은 시간대에서 구분 기호 이 아닌 빼기 기호로 해석됩니다. 결과적으로 +05 : 00을 반환했습니다. 이후 코드 샘플을 수정하여 마지막 대시를 제거했습니다. 이제 시간대가 올바르게 -05 : 00로 렌더링됩니다. 혼란스러워서 죄송합니다.
감사합니다 !! 그러나 실행할 때 to_timestamp_tz (번역 ('2003-10-10T12 : 00 : 00-05 : 00', 'T', '') 'YYYY-MM-DD HH24 : MI : SS-TZH : TZM ') 이중에서; 10-OCT-03 12.00.00.000000000 PM +05 : 00 (나는 -05 : 00이 아닌 +05 : 00을 얻으려고한다)? – MoreCoffee
나는 어떻게 당신이 -05 : 00을 얻는 지 이해하지 못한다 .. – MoreCoffee
완벽하게, 정확히 내가 필요로하는 것 – MoreCoffee
다음은이를 DATE 및 TIMESTAMP WITH TIME ZONE 데이터 유형으로 변환하는 방법의 예입니다. 날짜를 (TIME ZONE 함께 TIMESTAMP의 전환에서) 정보가 손실되는 시간대를 입력합니다 : 그냥 그것의 재미를 위해
declare
strDate VARCHAR2(32767);
tzDate TIMESTAMP WITH TIME ZONE;
dtDate DATE;
nTimezone NUMBER;
dtDate_GMT DATE;
begin
strDate := '2002-10-10T12:00:00-05:00';
dtDate := TO_TIMESTAMP_TZ(SUBSTR(strDate, 1, 10) ||
SUBSTR(strDate, 12, 8) || ' ' ||
SUBSTR(strDate, 20, 6), 'YYYY-MM-DDHH:MI:SS TZH:TZM');
tzDate := TO_TIMESTAMP_TZ(SUBSTR(strDate, 1, 10) ||
SUBSTR(strDate, 12, 8) || ' ' ||
SUBSTR(strDate, 20, 6), 'YYYY-MM-DDHH:MI:SS TZH:TZM');
nTimezone := TO_NUMBER(SUBSTR(strDate, 20, 3)) +
(TO_NUMBER(SUBSTR(strDate, 24, 2))/60);
dtDate_GMT := dtDate - ((INTERVAL '1' HOUR) * nTimezone);
dbms_output.put_Line('dtDate=' || dtDate);
dbms_output.put_Line('dtDate=' || TO_CHAR(dtDate, 'YYYY-MM-DD HH24:MI:SS'));
dbms_output.put_line('tzDate=' || tzDate);
dbms_output.put_line('tzDate=' || TO_CHAR(tzDate, 'YYYY-MM-DD HH24:MI:SS TZH:TZM'));
dbms_output.put_line('nTimezone=' || nTimezone);
dbms_output.put_Line('dtDate_GMT=' || TO_CHAR(dtDate_GMT, 'YYYY-MM-DD HH24:MI:SS'));
end;
나는 시간대를 끌어 예제에 몇 가지 코드를 추가 문자열을 제거한 다음 현지 시간에 표준 시간대를 추가하여 GMT/UTC를 얻습니다.
공유하고 즐기십시오.
짧은 대답 :
SQL> select to_timestamp_tz('2002-10-10T12:00:00-05:00','yyyy-mm-dd"T"hh24:mi:sstzh:tzm')
2 from dual
3/
TO_TIMESTAMP_TZ('2002-10-10T12:00:00-05:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM
---------------------------------------------------------------------------
10-OCT-02 12.00.00.000000000 PM -05:00
1 row selected.
감사 롭.
@ user412045 : 질문이 명확하지 않습니다. 이 '2002-10-10T12 : 00 : 00-05 : 00'을 '20021010'으로 변환 하시겠습니까? "시간대 정보 유지"란 무엇을 의미합니까? –
2002-10-10T12 : 00 : 00-05 : 00을 Oracle Date로 변환하고 싶습니다. 20021010은 그저 하나의 예일뿐입니다. 시간대 정보를 유지함으로써 나는 완전한 날짜 시간을 가져올 수 있기를 원한다는 것을 의미합니다. 감사합니다 – MoreCoffee