Oracle to_date SQL格式奇怪的行为

时间:2010-06-23 13:54:01

标签: sql oracle datetime to-date

我已经搜索过SO网站,认为这很明显但是我还没找到。 基本上设置如下:

我在表格中有一个字符串:

  

06/22/2010 00:00:00

我选择它:

SELECT To_Date(item, 'MM/DD/YYYY HH24:MI:SS') from that_table

所以我有效地做了

SELECT To_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS') from that_table

我的数据库返回:

  

22.06.2010 00:00:00

现在我知道我可以做一个

to_char(to_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY HH24:MI:SS')

但是我需要select来返回日期格式(MM/DD/YYYY HH24:MI:SS),而不是字符串。我怎么能这样做?

修改 实际输出:

  

22.06.2010 00:00:00

所需输出(日期格式):

  

06/22/2010 00:00:00

2 个答案:

答案 0 :(得分:5)

DATE没有格式,只有在转换为字符串以进行显示时才会格式化。如果您正在使用SQL Plus,那么当您显示DATE列(不使用TO_CHAR显式格式化它)时,SQL Plus本身会使用NLS_DATE_FORMAT设置执行TO_CHAR转换:

SQL> select sysdate from dual;

SYSDATE
---------
23-JUN-10

SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2010-06-23 15:17:12

如果您不使用SQL Plus,那么您使用的任何工具都将执行类似操作,并且可能有不同的方式来指定显示的日期格式。

答案 1 :(得分:3)

日期是一个时间点,它没有格式(如数字:它们没有格式)。当您显示日期时,显然必须获得一种格式:如果您没有专门为Oracle提供格式,将使用会话的默认格式(会话参数NLS_DATE_FORMAT)。

结果:使用DATE数据类型进行日期算术和存储(无格式)。当您需要显示日期时(在报告或GUI中),请使用to_char功能或等效功能。