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_format
是 DD-MON-RR
。
我的 nls_time_format
是 HH.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;
我正在尝试按照以下方式将日期字符串格式化为日期,
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_format
是 DD-MON-RR
。
我的 nls_time_format
是 HH.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;