【问题标题】:Get month name from number in PostgreSQL从 PostgreSQL 中的数字获取月份名称
【发布时间】:2012-02-01 10:39:14
【问题描述】:

我有一张表,其中有一列 month(integer)。在此列中,我存储 1, 2, .. 12 之类的值。
但我必须显示月份name

例如: 如果值为1,我需要显示jan

【问题讨论】:

    标签: sql postgresql date


    【解决方案1】:

    基本上是@small_duck 已经发布的内容,但有一些改进:

    SELECT to_char(to_timestamp (4::text, 'MM'), 'TMmon')
    
    • 纯文本转换为4::text 就足够了,不需要to_char(..)

    • 问题要求小写“jan”,有一个template patternmon

    • 如果要本地化输出,请在模板前面加上 modifier TM

    【讨论】:

      【解决方案2】:

      可能有一个更快的答案,但似乎可以通过:

      • 将 int 转换为字符串
      • 将该字符串作为时间戳读取
      • 显示时间戳的月份。

      例如:

      select to_char(to_timestamp(to_char(4, '999'), 'MM'), 'Mon')
      

      返回“四月”。

      你可以把它变成一个函数:

      create function to_month(integer) returns varchar as
      $$
          select to_char(to_timestamp(to_char($1, '999'), 'MM'), 'Mon');
      $$ language sql
      

      并在整个代码中使用它。

      select to_month(month_column) from mytable
      

      【讨论】:

      • 嘿——知道为什么一个非常相似的实现会难以正确解释整个月份的名称吗?年(DM.DATE)|| TO_CHAR(TO_TIMESTAMP(to_Char( case when month(DM.DATE)+1>12 then 1 else month(DM.TM_DIM_KY_DTE)+1 end ,'99'), 'MM'), 'Mon')当前年份加上当前月份之后的一个月,因此 2012 年 11 月应该是 2012 年 12 月,如“2012Dec”。由于某种原因,某些字母会以数字形式返回,例如 Dec = 4ec 或 Jan = 1721395an
      猜你喜欢
      • 2011-09-27
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多