繁体   English   中英

php oci8 - 如何设置oracle timestamp返回的格式

[英]php oci8 - how set oracle timestamp returned format

我正在从php5脚本中的Oracle数据库中检索数据。 我希望返回一个特定的时间戳格式。 我在SO上找到了答案,说类似于Oracle本身的声明可以解决这个问题:

$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格式的时间戳,因此字符串如2012-11-28T17:37:24.000Z

如何在这种情况下确保'Z',因此不像2012-11-28T16:37:24.000 + 01:00这样的字符串?

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在这里测试

使用功能: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM