【问题标题】:Converting an Oracle date (stored as a number) in a SQL OPENQUERY在 SQL OPENQUERY 中转换 Oracle 日期(存储为数字)
【发布时间】:2017-05-18 11:01:49
【问题描述】:

我正在尝试在访问 Oracle 数据库的 SQL 中创建许多存储过程。

Oracle 中的所有日期都存储为 10 位数字,这会引起一些混乱。

我设计了一些动态 SQL,它允许我们运行 OPENQUERY 来挑选参数,但是我想做的是使用参数来指定日期。

事实证明这很困难,因为我们无法在服务器上创建视图,如果有人有他们可以建议的东西,那就太好了。

例子:

Oracle 10 : 1483527061
SQL Date  : 2017/01/04 10:51:01 000

如果您需要更多信息,请告诉我。

【问题讨论】:

  • “我正在尝试在 SQL 中创建一些存储过程”……您的意思是在 SQL Server 中?如果是这样,请更新您的问题和标签以引用 SQL Server,而不仅仅是 SQL(我们其他人认为它是指语言!)

标签: sql oracle


【解决方案1】:

Oracle 中的日期/时间看起来像 Unix 格式。如果是这样,你可以这样做:

select date '1970-01-01' + datecol / (60*24*24)

这会将其转换为 Oracle 中的日期。

【讨论】:

    【解决方案2】:

    Oracle 设置

    CREATE TABLE your_table ( datecol ) AS
      SELECT 1483527061 FROM DUAL;
    

    查询

    SELECT datecol,
           DATE '1970-01-01' + NUMTODSINTERVAL( datecol, 'SECOND' ) AS datetime
    FROM   your_table
    

    输出

    DATECOL    DATETIME
    ---------- -------------------
    1483527061 2017-01-04 10:51:01
    

    (如果你需要处理闰秒,那么你可以create a package to handle this。)

    【讨论】:

      【解决方案3】:

      实际上,Oracle 以毫秒为单位存储日期/日期时间/时间戳值。因此,要获得 Oracle 表示,请将 Unix 时间戳乘以 1000。

      因此,要将 Oracle 日期/日期时间/时间戳值转换为正常日期/时间,将其除以 1000 并转换得到的 Unix 时间戳。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 2012-11-04
        相关资源
        最近更新 更多