我在字符串数据类型的分区列中有2种类型的值。yyyyMMdd
yyyy-MM-dd
例如,有一些分区列值20200301
,2020-03-05
,2020-05-07
,20200701
等。
我需要用一个ddl语句来删除小于20200501
的分区,如
alter table tblnm drop partition(partcol < 20200501);
当我使用 "yyyy-MM-dd "格式删除分区时,只删除了 "2020-03-05 "分区,但当我使用 "yyyyMMdd "格式删除分区时,删除了 "20200301 "以及所有含有连字符(-
)的分区。
如何通过忽略连字符或忽略包含连字符的数据来比较值? 如果需要的话,我可以在 alter table 查询中替换连字符。
1条答案
按热度按时间dgiusagp1#
为什么所有带连字符的分区都会被删除,原因是java中的字符串比较:每一个
2020-XX-XX
字符串都小于每一个2020XXXX
字符串。为了限制没有连字符的分区,你应该在 ddl 中添加一个下限,格式为
yyyy0101
。要注意的是,前几年的分区不会被删除,但你可以自由地运行一些类似于
无论何时,只要您需要。