首页 > 解决方案 > 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 但没有做对,知道吗?谢谢

标签: sqlpostgresql

解决方案


您需要先使用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;

推荐阅读