sql - postgres sql提取年月
问题描述
有一个这样的列的表:
first_day_month
01/07/2020
01/07/2020
01/08/2020
01/09/2020
.......
需要创建一个类似年月的列,尝试过to_char(first_day_month, 'MM/YYYY')
但出现错误:
Error running query: INVALID_FUNCTION_ARGUMENT: Failed to tokenize string [M] at offset [0]
试过了
concat(extract(year from first_day_month),'-',extract(month from first_day_month) ) as month,
有一个错误:
Error running query: SYNTAX_ERROR: line 2:1: Unexpected parameters (bigint, varchar(1), bigint) for function concat. Expected: concat(array(E), E) E, concat(E, array(E)) E, concat(array(E)) E, concat(varchar)
也尝试过 date_parse 但没有做对,知道吗?谢谢
解决方案
您需要先使用TO_DATE
,将列转换为正确的日期。然后根据TO_CHAR
需要使用格式化:
SELECT TO_CHAR(TO_DATE(first_day_month, 'DD/MM/YYYY'), 'MM/YYYY') AS my
FROM yourTable;
请注意,在这种情况下,由于您想要的文本月份年份实际上只是正确的子字符串,因此您也可以直接RIGHT
在此处使用:
SELECT RIGHT(first_day_month, 7)
FROM yourTable;
最后,请注意这YYYY/MM
通常是一种更好的格式,因为它可以正确排序。所以也许考虑使用这个版本:
SELECT TO_CHAR(TO_DATE(first_day_month, 'DD/MM/YYYY'), 'YYYY/MM') AS ym
FROM yourTable;
推荐阅读
- java - 字节伙伴与 JBOSS / Wildfly EJB 3 类
- arrays - 在有序数组 a 中,如果 a[0] 大于 0,则没有其他值可以等于它的索引,对吧?
- java - Java新方式如何避免switch语句中默认条件出错
- vue.js - Vue 3 只对深度变化做出一次反应
- git - git: fetch --recurse-submodules 提取两次
- vue.js - 在 Vue.js 中显示组件的多个实例
- string - 嵌套 Batch For Do 循环以使用文件夹名称和文件名
- path - "where python" 'where' 不被识别为内部或外部命令、可运行程序或批处理文件"
- python - 在没有 sudo 或 wget 的情况下作为用户(本地)安装 python 3.7.7 的最佳方法是什么?
- ios - 无法在 iOS 上的谷歌地图路线中添加航点