【问题标题】:How to get time string to Time in oracle sql如何在oracle sql中获取时间字符串到时间
【发布时间】:2015-10-15 06:21:03
【问题描述】:

我在 oracle VARCHAR2 列中以字符串的形式插入时间。但是当我尝试以时间的形式检索它时,它并没有给我正确的时间,它只是给了我一个我没有保存的日期。

INSERT INTO table1
    (timestr) Select substr(numtodsinterval(MAX(date1)-MIN(date2),'day'),
12,8)  from table2 where ....; // stored timestr column value: 00:00:00

检索...

select TO_DATE(timestr,'hh24:mi:ss') from table1; 

...只给10/01/2015

【问题讨论】:

    标签: sql oracle datetime time


    【解决方案1】:

    你应该使用 to_char 来查看时间

     select to_char(timestr,'hh24:mi:ss') from table1; 
    

    【讨论】:

      【解决方案2】:

      这可能是因为您的客户端设置。如果您使用的是 SQL Developer,请转到 Tools->Preference->Database->NLS 并更改设置以查看时间戳。

      如果您使用的是 SQLPlus,请更改 nls_date_format 或查看以下解决方案。

      https://community.oracle.com/thread/312115?start=0&tstart=0

      【讨论】:

        【解决方案3】:

        在 Oracle 中没有 TIME 数据类型的概念。只有 DATE 和 TIMESTAMP,两者都包含日期和时间元素。

        您的检索会将您的时间列转换为 DATE:TO_DATE(timestr,'hh24:mi:ss')。 Oracle 会按照我们的要求执行,因此它会显示一个日期。由于timestr 中没有日期元素,它为我们分配了一个:今天的日期。

        您只看到10/01/2015,因为您的客户端的 NLS 设置配置为仅显示日期元素。更改设置以显示时间元素,在客户端或通过更改会话如下:

        SQL> select to_date('10:08:23', 'hh24:mi:ss') ts from dual
          2  /
        
        TS
        ---------
        01-OCT-15
        
        SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS'
          2  /
        
        Session altered.
        
        SQL> select to_date('10:08:23', 'hh24:mi:ss') ts from dual
          2  /
        
        TS
        --------------------
        01-OCT-2015 10:08:23
        
        SQL> 
        

        如果您只想查看可以更改 NLS 设置的时间...

        SQL> alter session set nls_date_format='HH24:MI:SS' 
          2  /
        
        Session altered.
        
        SQL> select to_date('10:08:23', 'hh24:mi:ss') ts from dual
          2  /
        
        TS
        --------
        10:08:23
        
        SQL>
        

        ...但是那会很烦人....

        SQL> select sysdate from dual
          2  /
        
        SYSDATE
        --------
        23:59:52
        
        SQL> 
        

        那么为什么不直接将列显示为字符串而不强制转换为 DATE?

        select timestr from table1; 
        

        【讨论】:

          猜你喜欢
          • 2015-04-01
          • 2015-03-11
          • 1970-01-01
          • 2020-02-06
          • 1970-01-01
          • 1970-01-01
          • 2013-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多