如何创建日期

时间:2019-05-23 09:29:09

标签: sql postgresql

如何使用postgresql11创建日期格式yyyy-mm

TextInput

3 个答案:

答案 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列是多余的。
  • 为列使用合理的名称。如果您希望一栏代表一个月,那么yyyymmdate更具信息性。
  • Postgres以相同的方式存储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 byselect查询中使用。