MySQL-group_concat函数用法-生成签到日期序列

原创 2015年11月17日 16:18:53

前端工程师需求如下:

    将用户每月签到过的日期在日历上显示出来。格式是:  0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

其中,1表示有签到,0表示没有签到。


解决思想:

    1.生成一张伪表,存储1-31共31行。

    2.然后用这伪表作基表与签到的数据表进行外关联,再利用MySQL的group_concat函数连接起来。


代码如下:

delimiter //
create procedure pro_wx_func_logindays
(
   in  iv_openid                  varchar(128)     -- 用户ID
  ,in  iv_year_mon                varchar(8)       -- 年月
  ,out ov_seq_logindays           varchar(128)     -- 输出签到日期序列
  ,out oi_result                  int              -- 输出结果
  ,out ov_message                 varchar(1024)    -- 输出信息
) 
begin
/*
 * 一、定义部分 
     定义变量、游标、处理程序
**/	
    -- 每月天数
    declare vi_days int ;

   
/*
 * 二、处理部分
**/	
    set vi_days = last_day(concat(iv_year_mon,'01')) ;
    
    -- 获取签到序列
    select group_concat( if(b.checkin_date,1,0) order by a.pos )  checkin_seq
      into ov_seq_logindays
      from tb_wx_assist_day_seq   a
      left join
    	     tb_wx_func_checkin_log b 
    	  on a.pos    = day(b.checkin_date)
    	 and b.openid = iv_openid
       and date_format(b.checkin_date,'%Y%m') = iv_year_mon
     where 1 = 1
       and a.pos <= vi_days ;
    
       set oi_result = 0 ;
       set ov_message = 'it is ok!' ;
       
end ;
//
delimiter ;

结果如下:

mysql> select @a ;
+---------------------------------------------------------------+
| @a                                                            |
+---------------------------------------------------------------+
| 0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
+---------------------------------------------------------------+
1 row in set (0.00 sec)


MySQL中group_concat函数,用符号连接查询分组里字段值

MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '...
  • my_yang
  • my_yang
  • 2012年01月09日 11:53
  • 11178

mysql生成一个连续的时间序列

select date_add('2021-01-01',interval @i:=@i+1 day) as date from ( select 1 union all select 1 unio...
  • nciasd
  • nciasd
  • 2015年12月31日 17:15
  • 3050

MYSQL生成两个日期之间的所有日期数据

set @i = -1; set @sql = repeat(" select 1 union all",-datediff('2021-01-01','2030-12-31')+1); set ...
  • longvs
  • longvs
  • 2014年04月01日 17:21
  • 8326

mysql函数GROUP_CONCAT()的使用(多条数据合并)

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用
  • tolcf
  • tolcf
  • 2014年10月21日 10:15
  • 6527

MySQL的group_concat函数--实现查询结果 按列拼接

MySQL的group_concat函数 实现结果集的 按列拼接成字符串输出 例子: TEST表 SELECT GROUP_CONCAT(valid_start_time) FROM te...

mysql存储过程 函数积累GROUP_CONCAT(expr)

GROUP_CONCAT(expr) 该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示:  GROUP_CONCAT([DISTINCT] expr [,expr ....

[每日一答] [20151013] MySQL中的GROUP_CONCAT()函数详解

GROUP_CONCAT将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号,可以累加的字符长度为1024字节。可以对这些参数进行修改。...

对字符串的“sum”——Oracle里实现类似MySQL group_concat函数

oracle自定义聚集函数接口简介    a. static function ODCIAggregateInitialize(sctx IN OUTstring_agg_type )    ...

PostgreSQL如何实现MySQL中的group_concat聚集函数(简单的拼接功能)

1.postgreSQL中没有现成的group_concat聚集函数 2.postgreSQL可以自定义聚集函数一.首先我们要知道MySQL中的group_concat聚集函数是干什么的? gro...

MySQL连表操作和GROUP_CONCAT函数的使用

在开发网站的时候,数据库操作是必须,复杂的网站有时要涉及到几张表的同时操作。以下简单讲解一下多表查询和GROUP_CONCAT函数的使用。例如有三张表 jd_role:角色表,jd_role_priv...
  • bao2436
  • bao2436
  • 2016年02月23日 20:41
  • 680
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL-group_concat函数用法-生成签到日期序列
举报原因:
原因补充:

(最多只允许输入30个字)