3

次の形式 に変換しようとしsysdateています。toChar2006-11-20T17:10:02+01:00

この形式から: 16/08/2012 13:40:59

これを行う標準的な方法はありますか?

を使用しtoCharてパーツを文字列として指定しようとしましTたが、機能していないようです。

前もって感謝します

ジェジピン

編集:

私はニコラスのソリューションを試しましたが、上で述べたように、sysdate を使用する必要があります。次の選択クエリを使用しました。

    select to_char(to_timestamp_tz(sysdate-365, 'dd/mm/yyyy hh24:mi:ss'),'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM') from dual;

ただし、これは次を返します。

     0012-08-16T00:00:00 +01:00

2012-08-16T00:00:00 +01:00 のはずなので、これは正しくありません

4

3 に答える 3

4

試す:

 select to_char(sysdate, 'yyyy-mm-dd') || 'T' || to_char(sysdate,'hh24:mi:ss') || sessiontimezone
from dual;

戻り値:
2013-08-16T13:00:51+00:00

于 2013-08-16T12:57:40.710 に答える
1

タイムゾーン情報を含む形式で表示sysdateするには、一連の変換を行う必要があります。

  1. sysdate関数を使用して文字列リテラルに変換しto_char()ます。
  2. 関数を使用して、文字列リテラルをトゾーン付きのタイムスタンプに変換しto_timestamp_tz()ます。
  3. 最後に、 を使用して最終結果を文字列リテラルに変換しto_char()ます。

次のように:

 select to_char(
                to_timestamp_tz(
                                 to_char(sysdate - 365, 'dd/mm/yyyy hh24:mi:ss')
                                , 'dd/mm/yyyy hh24:mi:ss')
                , 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM'
               ) as res
  from dual

結果:

RES
--------------------------
2012-08-16T17:29:28 +04:00

文字列リテラルを二重引用符で囲んでフォーマット マスクに含めることができます。

于 2013-08-16T13:00:14.020 に答える
0

「T」を含む値はISO 8601と呼ばれ、「XS:DateTime」または「XSD:DateTime」または「XML Schema DateTime」とも呼ばれます。Oracle の sessiontimezone コマンドは、'-04:00' だけでなく、'America/Los_Angeles' のような値も返す可能性があることに注意してください (データベースの設定によって異なります)。TZ_OFFSET は \0 - 終了文字列を返すため、置換も必要です。したがって、これは機能するはずです:

create or replace function to_iso8601 (datetime_in in date) return varchar is 
begin
    return to_char(datetime_in, 'yyyy-mm-dd') || 'T' || to_char(datetime_in,'hh24:mi:ss') || replace(TZ_OFFSET(DBTIMEZONE),chr(0));
end;
/
select to_iso8601(sysdate) from dual;

結果:

2014-11-03T16:53:45-04:00
于 2014-11-03T21:55:52.337 に答える