【问题标题】:Display number as a date in Oracle在 Oracle 中将数字显示为日期
【发布时间】:2020-09-02 06:30:01
【问题描述】:

我正在尝试在 SQL Developer 中将变量显示为日期(最好是 2017/01/05 之类的)。
如果我查询:

select raw_date from src_table where rownum < 2

我得到一个号码:

61340

从下面的查询中,我发现源日期的 type=2,我看到它不是数字就是浮点数。我假设因为 Len=4 并且没有小数点,所以它是一个数字而不是一个浮点数。

select dump(raw_date) from src_table
where rownum < 2;
Typ=2 Len=4: 195,7,14,41

我尝试过投射到日期并使用 to_date 函数,但到目前为止还没有成功。当我尝试时:

select to_date(raw_date, 'yyyy/mm/dd') as my_date from src_table

我明白了:

ORA-01861: literal does not match format string

我假设我的语法是关闭的。我接近了吗?

【问题讨论】:

  • 61340 可以代表很多东西(添加更多内容,Excel 日期从 2067 年 —Windows — 或 2071 —Mac —)。你真的需要知道预期的输出,否则你只是在猜测。
  • @ÁlvaroGonzález Excel 16.16.25 在我的 MacBook 上给出 2067-12-09。
  • @sobrio35 您不能使用右键单击或通过查询user_tab_columns(或all_tab_columns,如果表在另一个模式中)获取列的标准定义吗?不过是numberfloat 只是 number 的一个子类型,在整个历史或 Oracle 中,没有人使用过。
  • @sobrio35 。 . .您需要询问设计或拥有数据库的人。您所拥有的是一个数字,并且可以通过多种方式将其映射到日期。例如,它可以表示 2040-06-13 或 1940-06-13。
  • @WilliamRobertson 感谢您的反馈(我不是 Mac 用户)。 PC/Mac 1900/1904 问题众所周知,但我承认我不知道具体的系统是否会受到影响,也不知道它会产生什么具体症状。

标签: sql oracle date


【解决方案1】:

对于 61340,您期望得到什么结果?

代表日期的数字可能是儒略日期;在这种情况下:

SQL> select to_date(61340, 'j') from dual;

TO_DATE(61
----------
10.12.4545

SQL>

但是 - 这个值没有多大意义。 4545年?嗯?

反之亦然(日期到儒略日期)返回

SQL> select to_char(sysdate, 'j') from dual;

TO_CHAR
-------
2459095

SQL>

如果你知道那个 61340 代表什么,那就更容易提供帮助了。

【讨论】:

    【解决方案2】:

    如果该值对应于天数,即第二天是一个更大的数字,您可以尝试这样的 sometnihg

    select DATE'1800-01-01' + 61340 dt from dual;
    
    DT                 
    -------------------
    12.12.1967 00:00:00
    

    用合适的值替换初始日期

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多