我有一个连接2个表以生成特定结果的查询:
select users.*, membership.* from users join membership on membership.id = user.m_id
问题是我需要计算所有用户并按年份(他们的注册年份)对他们进行分组,以便我可以看到每年的用户数。
日期未存储为日期格式,我使用了varchar
,因为我们仅保存year
和month
作为年/月。例如:2017/05
在users
表格中,我有一个名为join_month
的字段。那么是否可以将值分割为join_month
并将值除以年份?
答案 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
如果您需要日期抵消。