Oracle - to_date() 解析 00:00:00

Oracle - to_date() parse of 00:00:00

我正在尝试按照以下方式将日期字符串格式化为日期,

select to_date('11/19/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') as currentdate from dual;

输出应该是,

11/19/2019 12:00:00 AM

但是,我得到的输出是,

11/19/2019

当我执行以下操作时,

select to_date('11/19/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') as currentdate from dual;

我得到正确的输出,

11/19/2019 12:00:01 AM

我的 nls_date_formatDD-MON-RR

我的 nls_time_formatHH.MI.SSXFF AM

我想要上述格式的输出。对于除 00:00:00 以外的所有其他值都工作正常。

为什么 00:00:00 没有转换成所需的格式?有什么办法可以做到这一点?

正在获得正确的输出。只有它显示在您的会话(或数据库)的默认日期格式中,这似乎是mm/dd/yyyy

您可以使用参数 nls_date_format:

控制会话的默认日期格式
alter session set nls_date_format = 'MM/DD/YYYY HH24:MI:SS';
select to_date('11/19/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') as currentdate from dual;

或者,您可以使用 to_char() 将您的日期格式化为特定格式:

select to_char(
    to_date('11/19/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),
    'MM/DD/YYYY HH24:MI:SS'
) as currentdate from dual;

如果你想要 AM 格式,你需要这个:

select to_char(to_date('19/11/2019 12:00:00 AM','dd/mm/yyyy hh:mi:ss AM'),'dd/mm/yyyy hh:mi:ss AM') 
from dual;

如果你 运行 它是这样的:

select to_char(to_date('19/11/2019 00:00:00','dd/mm/yyyy hh:mi:ss AM'),'dd/mm/yyyy hh:mi:ss AM') 
from dual;

你会得到一个错误。 当您的日期格式不是 24 小时 (hh24) 时,您的小时值需要介于 1 和 12 之间。

这里是DEMO

经过一些研究,我意识到 OP 想要什么(从他的评论和他输入了更多细节之后)。 OP 的解决方案是:

第 1 步:

ALTER session SET NLS_DATE_FORMAT = 'DD-MON-RR HH.MI.SS AM';

第 2 步现在可以工作了:

select to_date('11/19/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') as currentdate from dual;