如何使用GROUP BY与DATE类列值的子字符串?

时间:2017-05-29 20:30:58

标签: php mysql date group-by substring

我有一个连接2个表以生成特定结果的查询:

select users.*, membership.* from users join membership on membership.id = user.m_id

问题是我需要计算所有用户并按年份(他们的注册年份)对他们进行分组,以便我可以看到每年的用户数。

日期未存储为日期格式,我使用了varchar,因为我们仅保存yearmonth作为年/月。例如:2017/05

users表格中,我有一个名为join_month的字段。那么是否可以将值分割为join_month并将值除以年份?

2 个答案:

答案 0 :(得分:1)

听起来您的数据库结构不能很好地为您服务。 你可以:

  • 使用SUBSTRING_INDEX()拆分并访问所需的子字符串

  • 通过包含年份和月份列来标准化您的日期数据

  • 将日期数据存储为DATE类型,并将日期部分默认为01,并在查询时使用YEAR()。

答案 1 :(得分:0)

  

是否可以从join_month中分割2016/05等文本值,并按年份对值进行分组?

当然。使用LEFT(join_month, 4)date_month列中提取前四个字符。如果您确信您的join_month字符串包含一致的数据,那么这将很好用。只需在查询中说出GROUP BY LEFT(join_month, 4)

即可

但是,如果您可以在这些列上使用日期算法,那么您的生活可能会更容易。此表达式将为date_month列中的第一天提供DATE值。

  DATE(CONCAT(LEFT(date_month, 4), '-', RIGHT (date_month, 2), '-01'))

这很有用,因为那时你可以做像

这样的事情
  DATE(CONCAT(LEFT(date_month, 4), '-', RIGHT (date_month, 2), '-01')) - INTERVAL 1 QUARTER

如果您需要日期抵消。

相关问题