Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这个To_Date()语句有什么问题?_Sql_Oracle - Fatal编程技术网

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

Sql 这个To_Date()语句有什么问题?,sql,oracle,Sql,Oracle,特别是最后一行。我希望日期显示为2013/04/04 11:46:06 AM,但它被输入为04-APR-13。有什么问题 自从我使用Oracle以来,已经有很多事情发生了,但正如我看到的,您正在使用一个过滤器来指示Oracle如何将字符串作为日期来读取。如果是这样,您是否考虑过匹配斜杠(左)和减号(右)?尝试: INSERT INTO Log_Table VALUES ('Mismatch', 'C:\Folder-SBX2\', '\Subfolder1\', 'm1.txt

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

自从我使用Oracle以来,已经有很多事情发生了,但正如我看到的,您正在使用一个过滤器来指示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'));

HH
HH12
是等效的。

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

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

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'));

“这太愚蠢了。不是你的答案,而是我的意思”

嗯,不。愚蠢的做法是以各种不同的格式存储日期。请查看那些将日期存储为字符串的人提出的无数问题中的任何一个

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

你没有。你有两个选择。第一种选择——我认为是更好的选择——是以Oracle规范格式返回日期,并让客户端软件决定如何显示日期。或者,您可以使用_CHAR并应用所需的格式掩码;直到现在,您才将日期转换为字符串,这可能会产生不良后果


如果您可以说服DBA您的首选格式是一种真正的格式,那么他们可以全局更改NLS_DATE_格式,这样每个人都可以看到按您的意愿呈现的日期(除非他们更改自己的本地设置)

因此,将格式添加到select语句中,如下所示:

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

你想让它出现在哪里?如果是SQLPlus,则需要在输出前使用
NLS\u DATE\u format
设置适当的格式。在SQLPlus中尝试,例如
alter session set nls\u date\u format='YYYY-MM-DD HH:MI:SS'
,然后执行查询。当我执行select语句时…嗯,很好。我尝试将-改为a/但没有效果我似乎记得这是Oracle v.6(也许还有7)中的一个问题。这些天,甲骨文足够聪明,能够接受分隔符中的细微差别。是的,我试着将-改为a/但没有任何差别。为什么Oracle如此愚蠢?我想问题是
AM
。您不需要指定它,因为
HH
是12小时,并且将附加AM或PM.true,在本例中,当硬编码日期时,当我省略AM时,该值起作用。问题是,我正在使用ASP.NET中的
DateTime.Now.ToString()
生成日期,该日期带有AM和PM的区别。当然,我可以取其中的一个子串,但是如果时间不是用SQL硬编码的,你怎么知道它是AM还是PM呢?它可以在date参数中,而不是format参数中。你试过日期('2013/04/04 11:46:06 AM','YYYY/MM/DD HH:MI:SS')哇,这太愚蠢了。不是你的答案,而是我的意思。如何将alter session语句与Select语句结合使用以正确显示日期?我的意思是,如果指定希望插入日期的格式,那么为什么Oracle在执行select时不以相同的格式显示它呢?Oracle的数据格式没有存储输入格式的机制。它将使数据类型的大小加倍。另外,当您以不同格式显示不同用户输入的日期时会发生什么情况?这会有多难看?@user1985189以及您对
插入foo(foo_-date)值(SYSDATE)
的格式建议是什么?@APC-hmm我明白您的意思。我想在创建表时在类型中指定日期格式效率太低了?我知道这不是怎么做到的,但对我来说,如果这个额外的呼叫会让你付出击键和数据库性能的代价,那么这会让我更感兴趣。为我们的用户服务,没有什么太大的努力。更重要的是,这会更改输出的数据类型,从而限制客户端软件如何与之交互。
select to_char(date_column, 'YYYY/MM/DD HH:MI:SS')
from my_table