【问题标题】:Oracle database date column does not show full date in phpOracle数据库日期列在php中不显示完整日期
【发布时间】:2015-05-21 10:51:23
【问题描述】:

我有日期列,日期值设置为格式:DD-MON-RR HH24:MI:SS 当我从 sqldeveloper 执行 sql 脚本时,我可以看到日期 2015 年 3 月 16 日 20:40:47。但是当我想用 php 得到这个值时:

$currentDATE=$row['DATE'];
echo gettype($row['DATE']);
echo $currentDATE;

我认为结果是 string16-MAR-15 如何在 php 页面中查看完整的日期信息?

【问题讨论】:

    标签: php oracle date oracle11g


    【解决方案1】:

    这将归因于您的 Oracle 客户端上的 nls_date_format 设置。这也是一个很好的演示,说明为什么您的 SQL 脚本不应该依赖隐式转换。

    你有两个选择:

    1. (推荐)更新你的sql脚本,让sql语句输出to_char(<date column>, '<your date format>')
    2. 通过在连接到 SQL*Plus 后运行 alter session set nls_date_format= '<your date format>'; 来更改默认的 nls_date_format 设置。

    第一个选项是迄今为止最好的选项;这意味着必须运行该脚本的任何人都将看到相同的结果,而不必费心设置 nls_date_format。

    【讨论】:

    • 当我将 php 中的查询更改为 SELECT to_date(B.issueDate ,' DD-MON-RR HH24:MI:SS') FROM BorrowedBy B;日期显示为 NULL
    • 你想使用TO_CHAR(b.issueDate, 'DD-MON-RR HH24:MI:SS')而不是TO_DATE()
    • 是的,很抱歉;我原来的答案是 to_date 而不是 to_char。脑筋急转弯!当您自己直接在 SQL*Plus 中运行查询时(即不通过 PHP,该 select 语句会显示什么?
    • 如果你这样做会怎样:select to_char(B.issueDate ,' DD-MON-RR HH24:MI:SS') issuedate FROM BorrowedBy?注:在将 DATE 数据类型中的内容转换为字符串时使用to_char 很重要,这样您就可以以相关格式查看它。如果您对已经是日期的内容执行 to_date,那么您会强制 Oracle 执行两次隐式转换,这可能会导致信息丢失,因为隐式转换取决于您的 nls_date_format 设置。
    • 你试过在 PHP 中运行select to_char(B.issueDate ,' DD-MON-RR HH24:MI:SS') issuedate FROM BorrowedBy 吗?我怀疑问题在于您的 PHP 查询正在寻找一个名为 ISSUEDATE 的列,由于它周围有 to_char,该列不再被调用。因此,您必须将列别名回ISSUEDATE
    【解决方案2】:

    我有日期列和日期值设置格式:DD-MON-RR HH24:MI:SS

    确保在显示 DATE 时,您使用 TO_CHAR 以及所需的格式掩码DATE 转换为 string /strong>。

    您看到的日期格式取决于您的特定于语言环境的 NLS 设置

    记住,

    1. 对于日期计算,使用 TO_DATE 将字符串转换为日期。如果是日期类型,则保持原样。
    2. 要以所需格式显示DATE 值,请使用TO_CHAR 和适当的格式掩码 将其转换为字符串。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多