【问题标题】:TimeZone Time/Date Formats with Oracle and .NET使用 Oracle 和 .NET 的 TimeZone 时间/日期格式
【发布时间】:2012-05-22 05:54:49
【问题描述】:

我是 Oracle 的新手,希望有人能为我澄清这种情况。

我编写了一个非常大的查询,它返回一组日期(Oracle 10g)。

在 SQL Developer 中,这些日期以 DD-MON-YY 格式显示(例如:'12-MAY-12')。 SQL Developer 中该字段的数据类型显示它是 Date 类型,并且选中了 Simple 单选按钮。当我在 SQL Developer 中运行此查询时,我得到一个如下所示的日期:

11-5-12

我在作为 C# Web 服务一部分的程序集中使用此查询。我们托管 QE 服务器的离岸团队中有人注意到该字段的值正在转换为 IST 偏移量(它已使用 GetXml 为 DataSet 转换为 XML)。问题是,在我在调试器中检查输出之前,我什至不知道偏移量在那里,因为我在 SQL Developer 中看不到它。它是这样过来的:

2012-05-11T06:09:15+05:30

没有使用内在的日期转换函数,只是提取日期的字段名称。

如何修改我的查询,以便在运行查询时不考虑即将到来的偏移量(我们确实需要保留日期的时间部分)?我知道这个问题听起来很复杂,但最终结果是写入海外另一个数据库的数据包含错误的偏移量,因此它被转换为相差 1 天的日期。

基本上我想要时间而不是偏移量。

【问题讨论】:

    标签: c# .net oracle plsql oracle-sqldeveloper


    【解决方案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,则默认显示日期和时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2012-10-20
      • 2020-04-04
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多