PostgreSQL修改text字段为DATE类型时如何跳过空值行?
问题描述
通过脚本抓取Excel表格数据导入PostgreSQL时,所有字段被设为text类型。其中部分字段实际应为日期时间类型,因此编写了以下ALTER语句将指定字段修改为DATE类型:
alter table table_name alter column column_name type DATE using to_timestamp(column_name, 'DD/MM/YYYY HH24:MI:SS');
但Excel表格存在空行,执行该语句时,空行对应的字段会被自动赋值默认时间戳,希望修改字段类型时保留这些空值(不生成默认时间戳)。
解决方案
使用NULLIF函数先将空字符串转换为NULL,再传入to_timestamp函数,这样空值就不会被转换为默认时间戳,而是保持NULL状态。修改后的语句如下:
alter table table_name alter column column_name type DATE using to_timestamp(NULLIF(column_name, ''), 'DD/MM/YYYY HH24:MI:SS');
如果Excel空行在数据库中存储的是NULL而非空字符串,to_timestamp原本就会返回NULL;如果是空字符串,NULLIF会将其转为NULL,避免无效的时间戳生成。
内容的提问来源于stack exchange,提问作者Suraj221b
相关产品推荐
相关产品推荐

