如何设置像'YYYYMM'这样的Postgresql默认值日期戳?

Str*_*rae 38 postgresql datetime default-value

作为标题,我如何设置一个表的列,使其具有当前年份和月份的默认值,格式为"YYYYMM",如今的200905?

Nic*_*son 79

请记住,日期的格式与存储无关.如果日期以该格式存储对您至关重要,则需要定义自定义数据类型或将其存储为字符串.然后,您可以使用提取,类型转换和连接的组合来获取该格式.

但是,我怀疑你想存储日期并获得输出格式.所以,像这样的东西将为你做到这一点:

    CREATE TABLE my_table
    (
    id serial PRIMARY KEY not null,
    my_date date not null default CURRENT_DATE
    );

(CURRENT_DATE is basically a synonym for now() and a cast to date).
Run Code Online (Sandbox Code Playgroud)

(编辑使用to_char).

然后你可以得到你的输出:

SELECT id, to_char(my_date, 'yyyymm') FROM my_table;
Run Code Online (Sandbox Code Playgroud)

现在,如果你确实真的需要那场存储为一个字符串,并确保你总是可以做的格式为:

CREATE TABLE my_other_table
(
id serial PRIMARY KEY not null,
my_date varchar(6) default to_char(CURRENT_DATE, 'yyyymm')
);
Run Code Online (Sandbox Code Playgroud)


Cur*_*son 15

为了防止Milen A. Radev无法发布他的解决方案,这就是:

CREATE TABLE foo (
    key     int PRIMARY KEY,
    foo     text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Run Code Online (Sandbox Code Playgroud)


Mar*_*lke 9

你为什么想做这个?

恕我直言,您应该将日期存储为默认类型,如果需要,请将其转换为所需格式.

您可以通过指定列的格式但使用视图来逃避.我不知道其他方法.

编辑:

说真的,在我的意见中,您应该在具有日期类型的表上创建一个视图.我在谈论这样的事情:

create table sample_table ( id serial primary key, timestamp date); 
Run Code Online (Sandbox Code Playgroud)

然后

create view v_example_table as select id, to_char(date, 'yyyymmmm');
Run Code Online (Sandbox Code Playgroud)

并在您的应用程序中使用v_example_table.