[英]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这样的字符串?
ff3
对DATE
数据类型无效,因为它不包含小数秒。
对于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
,您将以该格式获得它。
如果您需要格式化DATE
或TIMESTAMP
,您可以使用格式伪造时区部分;
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"'
使用功能: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.