2010-06-23 72 views
0

我已经拖网SO网站认为这是非常明显的,但可惜我还没有找到一个。 基本上设置如下:Oracle to_date SQL格式奇怪的行为

我有一个字符串在表像这样:

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 

我的数据库返回:

2010年6月22日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') 

,但我需要选择要返回日期格式(MM/DD/YYYY HH24:MI:SS),而不是字符串。我怎样才能做到这一点?

编辑: 实际产出:

2010年6月22日00:00:00

希望的输出(在日期格式):

6月22日/ 2010 00:00:00

+0

我重新读了几次你的问题,但不明白你想要什么。至少,请添加期望与实际输出的示例 (编辑)Aha,您的意思是当没有格式提供时的默认日期格式! – Juraj 2010-06-23 14:00:05

+0

Juraj请参阅我的编辑。 – Rio 2010-06-23 14:03:58

回答

3

日期是一个时间点,它没有格式(如数字:他们没有格式)。当你显示日期时,显然它必须得到一个格式:如果你没有专门给Oracle一个格式,会使用默认的会话格式(会话参数NLS_DATE_FORMAT)。

结果是:对日期算术和存储使用DATE数据类型(无格式)。当需要显示日期时(在报告中或在GUI中)使用to_char函数或其他类似的函数。

+0

但是我怎么能够做日期比较(如今天和明天之间的日期?) – Rio 2010-06-23 18:07:34

+1

@Rio:与比较运算符。 _如今天和明天之间的日期_如果所有日期都存储为日期,那么比较就像'trunc(sysdate)<= date_in_question和date_in_question 2010-06-23 20:08:44

5

DATE没有格式,只有在转换为字符串以进行显示时才格式化。如果您正在使用SQL Plus中那么当你显示一个日期列(不使用TO_CHAR显式格式化),SQL加上本身使用NLS_DATE_FORMAT设定执行TO_CHAR转换:如果您没有使用SQL Plus中

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 

,那么你使用的任何工具都会做类似的事情,并且可能有不同的方式来指定显示的日期格式。