2015-10-15 15 views
2

我在oracle VARCHAR2列中插入了字符串形式的時間。但是,當我試圖以時間的形式檢索它時,它並沒有給我適當的時間,它只給我一個我沒有保存的日期。如何在oracle中獲取時間字符串sql

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

回答

1

你應該用TO_CHAR,看看時間

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

在Oracle中沒有一個時間數據類型的概念。只有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> 

那爲什麼不顯示列作爲一個字符串的所有無鑄的日期?

select timestr from table1; 
相關問題