【问题标题】:oracle date to stringoracle 日期转字符串
【发布时间】:2013-11-25 18:53:03
【问题描述】:

我有这个问题:我想将 sysdate 转换为字符串,仅对月、日和小时使用填充模式。然而,

 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

有什么想法吗?提前致谢

【问题讨论】:

  • 根据Oracle Fill Mode documentation,每次使用fm 时,它都会在打开和关闭之间切换填充模式。因此,如果我只想打开填充模式一小时,我会输入'fmHH12:fmMI:SS AM'

标签: string oracle date seconds


【解决方案1】:

您不应该使用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 文档中有关日期格式模型的更多信息:Format models

编辑

是的,我提供的代码将返回,例如,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。

【讨论】:

  • 感谢您的回答,但这不会产生像 01/01/2013 12:00:00 am 这样的日期吗?我希望它是 2013 年 1 月 1 日。还是我在这里弄错了?
  • @user2986852 是的,你是对的,我以为你想要所有数字的前导零。我已经编辑了我的答案 - 看看如何实现你所需要的。
  • 谢谢。那是决定性的。我以为我需要为日期时间的每个部分设置填充模式,但每次我设置它时,我都会打开/关闭它。我明白了,非常感谢!
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2015-04-25
  • 2011-12-16
相关资源
最近更新 更多