PostgreSQL从给定日期提取无前置零月份的实现方法
PostgreSQL 提取日期对应无前置零月份的实现方案
此前尝试方案的问题说明
substr字符串截取方案:对'2020-03-01'执行substr('2020-03-01',6,2)得到的是带前导零的字符串类型值'03',既不是纯数值,也不符合无前置零的结果要求;且本质是字符串操作,没有日期合法性校验,如果输入的日期格式不是固定横杠分隔,截取位置会直接出错- 执行
date_part、extract写法触发语法错误的常见原因:未对传入的字符串参数做显式日期类型转换、漏写固定语法关键字、标识符书写错误
最优实现方案
PostgreSQL 原生日期函数是该需求的最优解,相比字符串截取可靠性更高、性能更好,正确写法如下:
EXTRACT函数(官方推荐写法)
对应代码:
返回结果:数值类型SELECT EXTRACT(MONTH FROM DATE '2020-02-03');2,无前置零,完全匹配需求。注:如果是表中存储的
date/timestamp类型字段,可直接传入字段名,不需要额外加DATE关键字做类型转换,例如:SELECT EXTRACT(MONTH FROM create_time) FROM order_table;date_part函数(适配旧版本兼容场景)
对应代码:
返回结果同为数值类型SELECT date_part('month', DATE '2020-02-03');2。
之前语句报错的排查要点
- 写
EXTRACT语句时漏写FROM关键字,例如错误写法EXTRACT(MONTH '2020-01-01') - 传入字符串参数时未做显式日期类型转换,严格配置的实例会因类型不匹配触发语法报错
- 关键字书写错误,例如将
MONTH、FROM拼写错误,或是将date_part的第一个参数写为非合法的月份标识
内容的提问来源于stack exchange,提问作者erik-stengel
相关产品推荐
相关产品推荐

