4

php5 スクリプトで Oracle データベースからデータを取得しています。特定のタイムスタンプ形式が返されるようにしたいと考えています。Oracle自体のステートメントに似たステートメントがトリックを行うというSOの回答を見つけました:

$stid = oci_parse ($connection, "alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss.ff3'");
oci_execute ($stid);

これにより、後続のクエリが次のようになることが保証されます

$stid = oci_parse ($connection, 'select * from table');
oci_execute ($stid);

タイムスタンプ形式が正しい形式で返されます。

しかし、私が何をしても、私は常に次のようなフォーマットを取得します

28-NOV-12 05:37:24.000000 PM

私の質問は次のとおりです。何が問題なのですか? 必要なタイムスタンプ形式を確実に取得するためにphpで実行するステートメントは何ですか?

副次的な質問: php がタイムスタンプを ISO 8601 形式で取得するようにするにはどうすればよいですか?

その場合に「Z」を確保する方法、したがって2012-11-28T16:37:24.000+01:00のような文字列ではありませんか?

4

2 に答える 2

4

ff3DATE小数秒が含まれていないため、データ型には無効です。

ISO8601形式に関してTIMESTAMP WITH TIME ZONEは、実際のタイムゾーンのみがあります。Z(つまりUTC)でフォーマットしたい場合は、できます。

ALTER SESSION SET TIME_ZONE = 'UTC';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"';

次に、を選択するTIMESTAMP WITH TIME ZONEと、その形式で取得されます。

フォーマットする必要がある場合はDATETIMESTAMPフォーマットを使用してタイムゾーンの部分を偽造することができます。

ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss".000Z"'
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'

ここでテストするための SQLfiddle

于 2013-02-04T16:57:39.080 に答える
1

使用関数: TO_CHAR

例: to_char(<>,'YYYY-MM-DD"T"HH24:MI:SS:FF3"Z"')

ドキュメント:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions200.htm#SQLRF06129

フォーマットモデル:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements004.htm#i34510

于 2013-02-04T15:53:18.703 に答える