Postgresql postgres中月份(仅月份)的数据类型是什么?

Postgresql postgres中月份(仅月份)的数据类型是什么?,postgresql,Postgresql,我需要在postgresql中创建一个名为“月”的列的表。“月”列应该有一月、二月等,而不是1、2、3等。我需要检索按月排序的数据。我应该使用什么样的数据类型,如何检索按月排序的数据?如果您只需要保存月份,而不需要保存整个日期,我会创建一个: 根据您的要求,根据您的需要,您有几个选择: 如果您只需要几个月作为静态记录,但实际上不需要时间,那么可以使用enum,正如Mureinik回答的那样 如果您需要将月份作为特定时间的一部分,您可以使用 假设您使用的是ENUM,您可以使用SELECT*FR

我需要在postgresql中创建一个名为“月”的列的表。“月”列应该有一月、二月等,而不是1、2、3等。我需要检索按月排序的数据。我应该使用什么样的数据类型,如何检索按月排序的数据?

如果您只需要保存月份,而不需要保存整个日期,我会创建一个:


根据您的要求,根据您的需要,您有几个选择:

  • 如果您只需要几个月作为静态记录,但实际上不需要时间,那么可以使用enum,正如Mureinik回答的那样
  • 如果您需要将月份作为特定时间的一部分,您可以使用
假设您使用的是ENUM,您可以使用
SELECT*FROM“Month”ORDER BY id ASC


一个没有名字的马说,由于本地化问题,最好使用几个月的数值,这是有道理的。您可以用不同的语言为不同的月份名称创建一个单独的表,但可能有一种更有效的方法。或者,可以有每个月的电话号码,查询后,您可以根据项目中的号码调用该月的名称,如建议的那样。这样,您可以根据本地化情况调用不同的名称。

最好将月份保存为整数,并在查询时显示月份名称:

with months(month) as (
    select generate_series(1, 12)
)
select
    month as month_number,
    to_char(
        '1999-12-31'::date + month * interval '1 month',
        'Month'
    ) as month_name
from months
order by month_number; -- or by month_name
 month_number | month_name 
--------------+------------
            1 | January  
            2 | February 
            3 | March    
            4 | April    
            5 | May      
            6 | June     
            7 | July     
            8 | August   
            9 | September
           10 | October  
           11 | November 
           12 | December 
为了便于构建查询,请创建一个返回月份名称的函数:

create or replace function month_name(month integer)
returns text as $$
select
    to_char(
        '1999-12-31'::date + month * interval '1 month',
        'Month'
    );
$$ language sql;
现在简单地说:

with months(month) as (
    select generate_series(1, 12)
)
select
    month as month_number,
    month_name(month)
from months
order by month_number;

在向最终用户显示数据时,最好先存储数字,然后将其转换为名称。如果存储
一月
,则无法使用非英语版本运行应用程序locale@a_horse_with_no_name是的,这很好,我试着喜欢你的建议,但在我的情况下,我做不到。@Mureinnik你的答案是正确的。我可以将日期类型(月枚举)更改为字符吗?我需要将日期从一个表转换为另一个表。其他表月份列数据类型为character。@Pirinthan您可以使用
运算符强制转换它:
从我的表中选择month\u col::varchar
with months(month) as (
    select generate_series(1, 12)
)
select
    month as month_number,
    month_name(month)
from months
order by month_number;