PostgreSQL中如何将character varying转换为timestamp?含报错解决
解决PostgreSQL中ISO格式字符串转timestamp的问题
嘿,这个问题我太熟悉了!你踩了PostgreSQL里引号使用的常见坑——
你用双引号包裹了时间字符串,但在PostgreSQL的语法里,双引号是用来引用数据库对象(比如列名、表名这类标识符)的,所以数据库直接把"2020-09-21T13:56:58Z"当成了一个列名来查找,自然就报“列不存在”的错误啦。
正确的转换方法
方法1:修正引号,使用to_timestamp函数
把包裹字符串的双引号换成单引号,同时注意格式字符串里的T和Z是固定的字面量,需要用单引号括起来(告诉数据库这不是格式占位符):
SELECT to_timestamp('2020-09-21T13:56:58Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"');
方法2:更简单的直接转换(强烈推荐)
幸运的是,你的时间字符串是标准的ISO 8601格式,PostgreSQL原生支持这种格式的自动解析,完全不用手动指定格式,直接用类型转换运算符::或者CAST()函数就能搞定:
用::的简洁写法:
SELECT '2020-09-21T13:56:58Z'::timestamp;
用CAST()的标准写法:
SELECT CAST('2020-09-21T13:56:58Z' AS timestamp);
这两种方式都会自动识别末尾的Z(代表UTC时区),准确转换为对应的timestamp值。
针对表字段的转换示例
如果是要转换表中character varying类型的字段(比如字段名叫event_time),直接把字符串替换成字段名即可:
SELECT event_time::timestamp FROM your_table_name;
内容的提问来源于stack exchange,提问作者Vardhaman Jain
相关产品推荐
相关产品推荐

