我是Oracle新手,希望有人能为我澄清这个场景。
我编写了一个非常大的查询,它返回一组日期(Oracle 10g)。
在SQL Developer中,这些日期以DD-MON-YY格式显示(例如:'12 -MAY-12')。 SQL Developer中的字段数据类型显示它是Date类型,并且选中Simple单选按钮。当我在SQL Developer中运行此查询时,我得到一个如下所示的日期:
11-MAY-12
我在作为C#Web服务一部分的程序集中使用此查询。托管我们QE服务器的离岸团队中的某个人注意到该字段的值正在转换为IST偏移量(使用GetXml为DataSet转换为XML)。问题是,我甚至不知道偏移量是否存在,直到我在调试器中检查输出,因为我在SQL Developer中看不到它。它就这样过来了:
2012-05-11T06:09:15 + 05:30
没有使用内在日期转换功能,只是提取日期的字段名称。
如何修改我的查询以便在运行查询时不考虑过来的偏移(我们确实需要保留Date的时间部分)?我知道这个问题听起来很复杂,但最终结果是写入海外另一个数据库的数据包含错误的偏移量,所以它被转换为关闭1天的日期。
基本上我想要时间而不是偏移量。
答案 0 :(得分:1)
Oracle DATE
有一个日期和时间组件,但没有时区。 TIMESTAMP WITH [LOCAL] TIME ZONE
将具有时区,并且还具有亚秒精度。
您可以更改DATE
数据转换为字符串的方式,以便以几种不同的方式显示。首先,它使用明确的TO_CHAR
SELECT to_char( <<your_date_column>>, 'YYYY-MM-DD HH24:MI:SS' )
FROM your_table
其次,您可以更改会话的NLS_DATE_FORMAT
,以便会话始终以特定格式显示数据
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT <<your_date_column>>
FROM your_table
第三,在SQL Developer中,您可以更改用于显示DATE
数据的字符串格式。如果您转到Tools | Preferences | Database | NLS
,则会有Date Format
字段。如果您将其从DD-MON-RR
更改为YYYY-MM-DD HH24:MI:SS
,您将获得默认显示的日期和时间。