sql - 如何设置 NLS_DATE_FORMAT | ZF2 与 oci8 |甲骨文 12

标签 sql oracle zend-framework2 date-formatting

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

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

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

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

我可以在我的配置文件中这样做吗?

(执行此操作的 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>

最佳答案

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

class OracleSessionInit 
{

    protected $_defaultSessionVars = array(
        'NLS_TIME_FORMAT' => "HH24:MI:SS",
        'NLS_DATE_FORMAT' => "YYYY-MM-DD HH24:MI:SS",
        'NLS_TIMESTAMP_FORMAT' => "YYYY-MM-DD HH24:MI:SS",
        'NLS_TIMESTAMP_TZ_FORMAT' => "YYYY-MM-DD HH24:MI:SS TZH:TZM",
        'NLS_NUMERIC_CHARACTERS' => ".,",
    );

    /**
     * @param \Doctrine\DBAL\Event\ConnectionEventArgs $args
     *
     * @return void
     */
    public function postConnect(ConnectionEventArgs $args)
    {
        if (count($this->_defaultSessionVars)) {
            array_change_key_case($this->_defaultSessionVars, \CASE_UPPER);
            $vars = array();
            foreach ($this->_defaultSessionVars as $option => $value) {
                $vars[] = $option." = '".$value."'";
            }
            $sql = "ALTER SESSION SET ".implode(" ", $vars);
            $args->getConnection()->executeUpdate($sql);
        }
    }
}

整个文件 OracleSessionInit .

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

关于sql - 如何设置 NLS_DATE_FORMAT | ZF2 与 oci8 |甲骨文 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33694607/

相关文章:

sql - Oracle SQL : Calculate value using previous row

java - 在java中使用Prepared Statement创建动态名称表

php - Zend Framework 2 - Doctrine 2 - 如何使用固定装置

sql - Oracle 数据库标准版是免费的吗?

database - Zend 2 数据库事务?

php - 如何在 Zend Framework 2 中包含外部库?

sql - 2 单表功能依赖

mysql - SQL - GROUP BY 有计数,连接多个表

MySQL 和 PHP 多对多数据库关系

php - 在 php 循环中使用 sql 函数 min()