试图获得数月

时间:2011-07-06 15:38:12

标签: mysql sql mysql-error-1054

membership

  • membership_startdate(2011-01-12)
  • membership_dueday值仅限日期(09,08,07)
  • member_id

member

  • member_id

如何计算会员到目前为止所支付的月数并考虑(membership_dueday)?假设membership_startdate是2011-01-01且membership_dueday是15,那么到目前为止的月数是5.5

我试过这段代码

SELECT COUNT(NUMBEROFMONTHS) 
  FROM membership 
 WHERE NUMBEROFMONTHS = PERIOD_DIFF(membership.membership_startdate, CURDATE());

这是错误的:

  

错误代码:1054
  “字段列表”中的未知列“NUMBEROFMONTHS”

...但它未考虑membership_dueday ...

1 个答案:

答案 0 :(得分:2)

1054错误是因为FROM子句中定义的表中不存在该列。此外,WHERE子句不用于设置变量或列别名 - 它用于过滤返回的行。

使用DATEDIFF

SELECT t.member_id,
       DATEDIFF(LEAST(NOW(), t.membership_dueday), t.membership_startdate) / 30
  FROM MEMBERSHIP t

LEAST函数将返回两个日期中的最低日期,因此如果截止日期是将来,它将使用当前日期。如果您想要反转,可以使用GREATEST功能。