如何设置NLS_DATE_FORMAT | ZF2与oci8 | Oracle 12

时间:2015-11-13 14:07:49

标签: sql oracle zend-framework2 date-formatting

我正在使用ZendFramework2,而我的数据库是Oracle 12。

我想为所有日期字段设置日期格式。

现在,当我选择日期字段时,结果为dd / mm / aa,我想要dd / mm / yyyy hh24:mi:ss。

(我使用TableGateway对象的方式与Zf2的Skeleton应用程序相同)

我可以在配置文件中执行此操作吗?

(执行此操作的sql代码应为“alter session set nls_date_format ='DD / MM / YYYY HH24:MI:SS';” )

感谢您的帮助。

<code>
------
config\autoload\db.config.global.php
------
<?php
return array(
  'db' => array(
    'driver' => 'OCI8',
    'connection_string' => " (DESCRIPTION =
                                (SDU = 8888)
                                (ADDRESS_LIST =
                                  (ADDRESS = (PROTOCOL = tcp)(HOST = 127.0.0.1)(PORT = 9999))
                                )
                                (CONNECT_DATA =
                                  (SERVER = DEDICATED)
                                  (SERVICE_NAME = MYDB)
                                )
                              )",
    'character_set' => 'AL32UTF8',
  ),
   'service_manager' => array(
           'factories' => array(
               'Zend\Db\Adapter\Adapter'
                       => 'Zend\Db\Adapter\AdapterServiceFactory'
           )
     )
);
</code>

2 个答案:

答案 0 :(得分:1)

我有类似的问题,但我使用的是Doctrine 2而不是Zend \ Db。我当然正在使用Oracle。 Doctrine 2解决了连接后更改会话的问题:

/storage/emulated/0/concreteangelradioedit (1).mp3

整个文件OracleSessionInit

您可以考虑使用Doctrine 2解决此问题。但是,如果您不能或您不想要,可以查看Zend Whitepaper PHP and Oracle第3-4页,“连接数据库”部分。这是一个ZF1解决方案,我没试过。但是很容易理解这个想法并适应ZF2。

答案 1 :(得分:0)

  

当我选择日期字段时,结果为dd / mm / aa,我想要dd / mm / yyyy hh24:mi:ss。

DATE 所见的格式仅适用于显示。 DATE以7 bytes的内部格式存储,这是Oracle的专有格式。

您可以在单个SQL级别使用 TO_CHAR 将日期转换为字符串,以所需的格式显示。

例如,

SELECT TO_CHAR(date_column, 'dd/mm/yyyy hh24:mi:ss') my_format FROM table_name;

另请注意,NLS_DATE_FORMAT具有优先顺序

让我们看一下时间顺序优先顺序,即从最高到最低:

  • 个人sql语句

  • 中使用 TO_CHAR TO_DATE
  • ALTER SESSION SET NLS_DATE_FORMAT=’whatever format model you want’;

  • 客户端计算机上将其设置为操作系统环境变量

  • NLS_DATE_FORMAT的设置位于数据库初始化参数

更新 OP无法处理SQL级别的日期格式化

在这种情况下,客户端/操作系统只需要显示格式,而无需在数据库/查询级别执行任何操作。无论您使用哪个客户端/操作系统显示日期,请务必修改客户端/操作系统的日期格式,以所需格式显示。