如何按varchar类型字段的年份进行分区

时间:2019-07-09 09:10:45

标签: postgresql

我正在学习PostgreSQL,我有一个源文件,其字段为varchar类型,其值如下:

20190625
20190626
20190627
20190628
20190629
20190630

现在我要按该字段的前几个字符进行分区,即按年份进行分区

我尝试这样做:

partition by range(substr(str, 1,4));

但是那不起作用,我想按年份划分,例如,如果有10年,则划分为10个分区,如果有20年,则划分为20个分区,划分的数量不是固定的,该怎么办那?

1 个答案:

答案 0 :(得分:1)

如评论中所述,date本来是一种更好的数据类型,但是由于日期至少采用“年-月-日”的形式,因此该列上的简单范围划分应该可以做到:

CREATE TABLE data (...)
PARTITION BY RANGE (str);

CREATE TABLE data_2019
PARTITION OF data FOR VALUES FROM ('20190101') TO ('20200101');

这是因为以这种格式,日期顺序,数字顺序和字符串顺序是相同的。

确保将COLLATE "C"添加到列定义中,以使字符串比较尽可能便宜。

我将添加一个检查约束,以确保数据始终具有这种格式。