代码之家  ›  专栏  ›  技术社区  ›  Bastiaan Wakkie

PostgreSQL:如何优雅地返回单空格分隔的罗马日期?

  •  2
  • Bastiaan Wakkie  · 技术社区  · 8 年前

    如果我使用标准方式接收带有罗马数字月份的日期。。。

    SELECT to_char(DATE '2000 12 05', 'DD RM YYYY') 
    

    PostgreSQL返回多间隔(1到4)分隔的日期:

    "05 XII  2000"
    "02 VIII 1976"
    "02 V    1976"
    

    RM 始终为该月的所有可能情况返回5个字符(从小到大: I VIII )

    这不是我所期望的。我希望返回单间隔分隔日期。我已经提出了一个使用regex_replace的解决方案,这可能会有点过头(?)

    SELECT regexp_replace(to_char(DATE '2000 12 05', 'DD RM YYYY'),
                         '(\d+)\s+([IVX]+)\s+(\d+)',E'\\1 \\2 \\3','g');
    

    返回单间隔日期结果:

    "05 XII 2000"
    "02 VIII 1976"
    "02 V 1976"
    

    有没有更优雅的方法?(…或者在PostgreSQL中发布错误?)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Lukasz Szozda    8 年前

    只需添加 FM :

    FM抑制前导零和尾随空白,否则会添加这些空白,以使图案的输出为固定宽度。

    SELECT to_char(DATE '2000 01 05', 'DD FMRM YYYY');
    -- 05 I 2000
    

    Rextester Demo

    推荐文章