2

我有这个问题:我想将 sysdate 转换为字符串,仅在月、日和小时上使用 fillmode。然而,

 select to_char(sysdate, 'fmmm/fmdd/yyyy fmhh12:mi:ss am') from dual

给我这样的结果

11/13/2013 9:45:**0** am

虽然它应该是

11/13/2013 9:45:**00** am

有什么想法吗?提前致谢

4

1 回答 1

4

您不应该使用FM格式模型,因为FM正如文档中所写:

FM- 与其他元素结合使用以直接抑制前导或尾随空白

因此FM,如果可能的话,使用将使您的最终字符串更短。

您应该FM从格式模型掩码中删除 ,它会按预期工作:

select to_char(TRUNC(sysdate), 'mm/dd/yyyy hh12:mi:ss am') from dual;

输出:

2013 年 11 月 13 日上午 12:00:00。

阅读 Nicholas Krasnov 的评论后,我改变了答案(谢谢)。

Oracle 文档中有关日期格式模型的更多信息:格式模型

编辑

是的,我提供的代码会返回,例如01-01-2013. 如果你想有没有前导零的月份和日期,那么你应该这样写:fmDD-MM-YYYY fmHH:MI:SS.

第一个fm使前导零被截断。第二个fm关闭该功能,并且您确实会在日期的时间部分得到前导零,例如:

SELECT TO_CHAR(
         TO_DATE('01-01-2013 10:00:00', 'DD-MM-YYYY HH12:MI:SS'),
         'fmmm/dd/yyyy fmhh12:mi:ss am')
FROM dual;

输出:

2013 年 1 月 1 日上午 10:00:00。
于 2013-11-13T08:53:33.003 回答