提取订阅期内计费日期的总发生率MySQL

提取订阅期内计费日期的总发生率MySQL,mysql,Mysql,正在尝试查找帐单日期在整个订阅期内出现的时间 例如,如果订阅期为2015年1月26日和2016年9月24日,则计费日期为每月27日。因此,查询应返回20作为完成的票据周期数 您需要使用MySQL数字生成器来生成日期序列 查询 SELECT COUNT(*) AS 'number of days' FROM ( SELECT '2015-01-26' + INTERVAL generator.number DAY AS date FROM ( SELECT

正在尝试查找帐单日期在整个订阅期内出现的时间


例如,如果订阅期为2015年1月26日和2016年9月24日,则计费日期为每月27日。因此,查询应返回20作为完成的票据周期数

您需要使用MySQL数字生成器来生成日期序列

查询

SELECT 
 COUNT(*) AS 'number of days'
FROM ( 

  SELECT 
   '2015-01-26' + INTERVAL generator.number DAY AS date
  FROM ( 

    SELECT 
     (@number  := @number + 1) AS number
    FROM (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_1
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_2
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_3
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_4
    CROSS JOIN ( SELECT @number := 0 ) AS init_user_param 
  ) AS generator
) AS dates 
WHERE 
   dates.date BETWEEN '2015-01-26' AND '2016-09-24'
 AND
   DAY(dates.date) = 27
结果

| number of days |
|----------------|
|             20 |

请参见演示

什么?“要搜索/计算的日期是27,查询应返回20”,用简单的词表示您想在2015年1月26日至2016年9月24日的日期范围内计算第27天?2月29日怎么样?我的答案也应该可以处理闰年@TimBiegeleisen,因此主题发起者不必担心2月29日