这个To_Date()语句有什么问题?

时间:2013-04-24 14:15:54

标签: sql oracle

    INSERT INTO Log_Table 
    VALUES ('Mismatch', 'C:\Folder-SBX2\', '\Subfolder1\', 'm1.txt', 
        '37587b066cf68b3870101c4bbc1a5dc0', 'SBX2', '7.2 SP13 CC5', 
        To_Date('2013/04/04 11:46:06 AM', 'YYYY-MM-DD HH:MI:SS AM'));

特别是最后一行。我希望日期显示为 2013/04/04 11:46:06 AM ,而是输入为 04-APR-13 。问题是什么?

4 个答案:

答案 0 :(得分:6)

Oracle以自己的格式存储日期。存储与显示无关。

04-APR-2013只是Oracle在不更改时使用的默认格式。如果要更改日期显示方式,则需要更改客户端中的NLS_DATE_FORMAT。例如,您可以运行此命令:

sql>  alter session set nls_date_format='YYYY-MM-DD HH:MI:SS AM';

  

“这是非常愚蠢的。不是你的答案,但甲骨文我的意思是”

嗯,不。愚蠢的是以各种不同的格式存储日期。从日期存储为字符串的人那里查看关于SO的任何无数问题。

  

“我将此alter session语句与Select语句结合使用以正确显示日期”

你没有。你有两个选择。第一个 - 在我看来更好 - 选项是以Oracle规范格式返回日期,让客户端软件决定如何显示它。或者,您可以使用TO_CHAR并应用您想要的格式掩码;只有现在你把日期转换为字符串,这可能会产生不良后果。

如果你能说服你的DBA你的首选格式是One True Format,那么他们可以全局更改NLS_DATE_FORMAT,这样每个人都会看到你想要的日期(除非他们改变自己的本地设置)。

答案 1 :(得分:1)

因此,将选择语句的格式添加为:

select to_char(date_column, 'YYYY/MM/DD HH:MI:SS')
from my_table

答案 2 :(得分:0)

自从我使用Oracle以来已经有了很多,但是我看到你使用过滤器来指示Oracle如何将字符串作为日期读取。如果是这样,你有没有考虑匹配斜线(左)和负(右)?

答案 3 :(得分:0)

尝试:

INSERT INTO Log_Table 
    VALUES ('Mismatch', 'C:\Folder-SBX2\', '\Subfolder1\', 'm1.txt', 
        '37587b066cf68b3870101c4bbc1a5dc0', 'SBX2', '7.2 SP13 CC5', 
        To_Date('2013-04-04 11:46:06', 'YYYY-MM-DD HH:MI:SS'));

HHHH12是等效的。