在 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;