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 AM', 'YYYY-MM-DD HH:MI:SS AM'));

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

4

4 回答 4

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,因此每个人都会看到您希望呈现的日期(除非他们更改自己的本地设置)。

于 2013-04-24T14:26:30.467 回答
1

因此,将格式添加到您的选择语句中:

select to_char(date_column, 'YYYY/MM/DD HH:MI:SS')
from my_table
于 2013-04-24T14:31:51.090 回答
0

自从我使用 Oracle 以来已经发生了很多事情,但正如我所见,您正在使用过滤器来指示 Oracle 如何将字符串读取为日期。如果是这样,您是否考虑过匹配斜线(左)和减号(右)?

于 2013-04-24T14:21:31.120 回答
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'));

HH并且HH12是等价的。

于 2013-04-24T14:23:42.840 回答