如何使用trunc更改Oracle DB中的默认日期格式?

时间:2014-07-02 09:17:05

标签: php oracle pdo oracle11g

我有两个独立的数据库。

当我在第一个db上运行查询时:

select
      TO_DATE( sysdate , 'YY-MM-DD')- 1 / 86400 data1,
      trunc(sysdate, 'dd') data2,
      to_char( sysdate, 'YYYY-MM-DD') date3
from dual

它会返回此结果:

    [data1] => 14/07/02
    [data2] => 14/07/02
    [date3] => 2014-07-02

当我在第二个db上运行相同的查询时:

select
      TO_DATE( sysdate , 'YY-MM-DD')- 1 / 86400 data1,
      trunc(sysdate, 'dd') data2,
      to_char( sysdate, 'YYYY-MM-DD') date3
from dual

返回如下结果

    [data1] => 14-JUL-02
    [data2] => 02-JUL-14
    [date3] => 2014-07-02

如何使用OCI更改DB2的响应以返回类似DB1的日期格式?

连接字符串到DB1

try
{
    $pdo = new PDO('oci:dbname='.User::db1()->hostfullspec, User::db1()->login, User::db1()->passwd);
    $pdo ->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER);
    $pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch (PDOException $e) {
     die("ORA RAP: PDO CONNECTION ERROR: " . $e->getMessage() ).PHP_EOL;
}

DB2的连接字符串

try
{
    $pdo = new PDO('oci:dbname='.User::db2()->hostfullspec, User::db2()->login, User::db2()->passwd);
    $pdo ->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER);
    $pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch (PDOException $e) {
     die("ORA RAP: PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}

2 个答案:

答案 0 :(得分:0)

参见How can I alter NLS_DATE_FORMAT in PHP 所以答案就像是

ALTER SESSION SET NLS_DATE_FORMAT ='YY-MM-DD';

答案 1 :(得分:0)

你应该做一个

alter session set nls_date_format='yy-mm-dd';

此外,代码

TO_DATE( sysdate , 'YY-MM-DD')- 1 / 86400 data1,

应该是

to_char(sysdate - 1/86400, 'YY-MM-DD') data1,

或者,如果您设置NLS,只需

sysdate - 1/86400 data1,