如何提取PostgreSQL中无时区时间戳(timestamp without time zone)列的日期部分
解决方案:提取PostgreSQL timestamp列的日期部分
快速解决方法
有两种常用方式能满足你的需求,你可以根据想要的结果类型来选:
转换为原生
date类型
如果只需要日期的底层类型(不是格式化后的字符串),直接用类型转换是最高效的方式:select "columnWithoutTimeZone"::date from my_table;执行后会返回
2022-06-11这样的标准date值,后续如果需要调整格式,还能再做二次处理。直接输出目标格式的字符串
要是想直接得到Jun 11, 2022这种格式的结果,用to_char()函数就可以,它支持直接对timestamp类型进行格式化:select to_char("columnWithoutTimeZone", 'Mon DD, YYYY') from my_table;这条语句会直接输出你想要的日期样式。
为什么to_date()会报错?
你碰到的ERROR: function to_date(timestamp without time zone) does not exist错误,核心原因是to_date()的设计定位是把字符串解析成日期,它要求第一个参数必须是text类型。而你的列是timestamp without time zone类型,PostgreSQL没有对应这个参数类型的to_date函数重载,自然就匹配不到合适的执行逻辑了。
简单说就是:to_date()是「字符串转日期」的工具,但你需要的是「日期时间转日期/日期字符串」,用错工具啦~
内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil
相关产品推荐
相关产品推荐

