如何使用postgresql11创建日期格式yyyy-mm
TextInput
答案 0 :(得分:1)
这是考施克回答的一种变体。
您应该只使用date
数据类型。无需为此创建其他类型。但是,我将使用check
约束来实现这一点:
CREATE TABLE public.ASSOL (
id serial primary key,
ind varchar(50) ,
s_R varchar(50) ,
R varchar(50) ,
th varchar(50),
C_O varchar(50) ,
ASSOL numeric(11,3),
yyyymm date,
constraint chk_assol_date check (date = date_trunc('month', date))
);
这仅允许您插入当月第一天的值。其他插入将失败。
其他说明:
serial
列。NOT NULL
对于PRIMARY KEY
列是多余的。yyyymm
比date
更具信息性。varchar()
和char()
,但对于大多数数据库,varchar()
是首选,因为尾随空格实际上占据了数据页上的字节。答案 1 :(得分:0)
对于年份和月份,您可以尝试如下
SELECT to_char(now(),'YYYY-MM') as year_month
year_month
2019-05
答案 2 :(得分:0)
您不能创建仅存储年和月部分的日期数据类型。在数据类型级别上没有这样的选项。
如果要截断日期部分以将其默认设置为月初,则可以执行此操作。这与仅包含月份和年份组成部分一样好,因为所有日期都将为day = 1,并且仅月份和年份会随着运行insert
的时间而变化。
例如:
create table t ( id int, col1 text,
"date" date default date_trunc('month',current_date) );
insert into t(id,col1) values ( 1, 'TEXT1');
select * from t
d col1 date
1 TEXT1 2019-05-01
如果您不想存储默认日期,只需在需要的地方使用date_trunc('month,date)
表达式即可,它可以在group by
或select
查询中使用。