使用PostgreSQL的add_month日期问题

时间:2013-10-04 18:51:13

标签: sql postgresql netezza

我正在尝试使用add_month函数但收到错误。我想获得[CAL_DATE - 13个月]和[CAL_DATE]之间的访问次数。日期的格式如下:2007-14,2010-05,2009-04等。这是我得到的错误 “不良时间戳外部代表'2009-11” 这是我正在使用的代码。我似乎无法弄清楚这个问题。

CAL_DATE BETWEEN add_months(CAL_DATE,-13) AND CAL_DATE.

我正在使用netezza数据库。

1 个答案:

答案 0 :(得分:1)

据推测,add_months期望将日期作为其第一个参数并返回日期。你没有日期,你有YYYY-MM字符串,所以你有两个问题:

  1. add_months不知道如何处理YYYY-MM字符串。
  2. BETWEEN不知道如何处理日期和YYYY-MM字符串。
  3. 如果您想使用add_months,那么您必须给它一个日期并将它给您的日期转换为您的YYYY-MM字符串之一,如下所示:

    to_char(add_months((cal_date || '-01')::date, -13), 'yyyy-mm')
    

    -01附加到字符串应该为您提供当月第一天的字符串表示形式,并且您应该可以使用date将其强制转换为::date。然后使用to_charadd_months的结果转换回您的YYYY-MM格式。

    或者,由于add_months在这里并没有真正对你有用,只需使用PostgreSQL间隔进行月份调整:

    to_char((cal_date || '-01')::date - interval '13 months', 'yyyy-mm')