从Oracle DB检索日期

时间:2010-08-10 09:03:30

标签: sql oracle date

我正在使用Oracle数据库,而我正在尝试使用PHP从其表中获取数据。其中一个表包含一个对我来说很奇怪的日期列。

当我在我的数据库客户端打开表格时(我正在使用Navicat Lite),我看到日期如“2007-11-29 10:15:42”,但是当我用PHP检索它们并显示日期时“ 29-NOV-07" 。我使用简单的SQL查询和标准PHP函数(oci_parse,oci_execute,oci_fetch_array)。

为什么DB中的值转换为此(无用)格式?如何获取日期,就像它存储在数据库中一样?谢谢你的提示!

1 个答案:

答案 0 :(得分:8)

Oracle DATE数据类型是一个时间点,它没有附加格式。将日期转换为字符串(例如,显示)时,应用于日期的格式将取决于您的会话参数(隐式转换)。根据我记得的PHP,检索函数会使用NLS_DATE_FORMAT会话参数自动将日期转换为字符串。

或者:

  • 事先用以下内容更改NLS_DATE_FORMAT:

    ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    
  • 或者,如果您想在查询中指定其他格式,则应明确要求:

    SELECT to_char(my_date, 'yyyy-mm-dd hh24:mi:ss') ...
    

更新

感谢ThinkJet指向PHP documentation的链接:

  

DATE列作为格式化为当前日期格式的字符串返回。可以使用Oracle环境变量(如NLS_LANG)或先前执行的ALTER SESSION SET NLS_DATE_FORMAT命令更改默认格式。