mysql查询等于_mysql中JSON查询条件 某属性等于某值

最近碰到一个问题,需要查询mysql的JSON字段,需求是类型为某种生日且月份为当月。因为某种生日的位置不固定,无法通过$[position].date筛选数据。

解决方案:找到最长长度,查出来出现的位置,然后用or将所有可能写出。

select anniversaries,date_format(DATE_ADD(now(),interval 8 hour), '%Y%m') monthkey,

2 comm_type,

belong_to_contactID,unique_contact_id,

case position when 0 then    concat('儿童生日:',DATE_FORMAT(anniversaries->>'$[0].date','%m.%d'),'|ChildBT_',TIMESTAMPDIFF(YEAR, anniversaries->>'$[0].date', DATE_ADD(now(),interval 8 hour))) when 1 then concat('儿童生日:',DATE_FORMAT(anniversaries->>'$[1].date','%m.%d'),'|ChildBT_',TIMESTAMPDIFF(YEAR, anniversaries->>'$[0].date', DATE_ADD(now(),interval 8 hour))) when 2 then concat('儿童生日:',DATE_FORMAT(anniversaries->>'$[2].date','%m.%d'),'|ChildBT_',TIMESTAMPDIFF(YEAR, anniversaries->>'$[0].date', DATE_ADD(now(),interval 8 hour))) end   comm_info,

case position when 0 then  concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[0].date','-%m-%d'),' 23:59:59')   when 1 then concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[1].date','-%m-%d'),' 23:59:59')  when 2 then concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[2].date','-%m-%d'),' 23:59:59')  end  expire_date,

contact_name,

case position when 0 then  concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[0].date','-%m-%d'),' 23:59:59')   when 1 then concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[1].date','-%m-%d'),' 23:59:59')  when 2 then concat(date_format(DATE_ADD(now(),interval 8 hour), '%Y'),DATE_FORMAT(anniversaries->>'$[2].date','-%m-%d'),' 23:59:59')  end business_date from (

select   anniversaries, SUBSTRING_INDEX( SUBSTRING_INDEX(JSON_SEARCH(anniversaries, 'all', 'CHILD_BIRTH_DATE'),'[',-1) ,']',1) position ,belong_to_contactID,unique_contact_id,contact_name

from contact c where c.removed=0

)allTotal where position=0 and month(anniversaries ->> '$[0].date')=month(DATE_ADD(now(),interval 8 hour))

or  position=1 and month(anniversaries ->> '$[1].date')=month(DATE_ADD(now(),interval 8 hour))

or  position=2 and month(anniversaries ->> '$[2].date')=month(DATE_ADD(now(),interval 8 hour))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值