求救!!!怎么用逗号分隔开数据库数据!!!

Leo201228 2019-06-21 02:55:08


数据如图
我的问题是这样的
我想找出日期在一年内的数据,代码也实现了,如下
SELECT * FROM report where 需开票日期>DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and 需开票日期<=DATE_FORMAT(NOW(),'%Y-%m-%d')
但是我发现我这个判断只能判断逗号前的日期,而逗号后的日期是不判断的,就比如图片里的最后一条,所以会漏掉很多
我需要逗号前后的日期任何一条在一年内就自动显示
试了find_in_set但是没成功
该怎么改?
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
_沉浮_ 2019-07-10
  • 打赏
  • 举报
回复
引用 3 楼 Leo201228 的回复:
[quote=引用 2 楼 _沉浮_ 的回复:]select SUBSTRING_INDEX(SUBSTRING_INDEX(date, ',', help_topic_id+1),',',-1) date,report.* from report left join mysql.help_topic ON help_topic_id < (LENGTH(date) - LENGTH(REPLACE(date, ',', '')) + 1) where date >=DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and date<=DATE_FORMAT(NOW(),'%Y-%m-%d')
你好并不行 这个方法我也试过 如果有逗号,两个日期在同一行的话会只先判断前面的日期 比如2017-07-01,2018-07-01 因为where是先执行过滤掉了,这里如果我只写12个月的话,这条日期是不会出来的 只有写24个月不被where过滤才会执行分割然后两条一起出来 以下是我的代码 SELECT substring_index( substring_index( a.需开票日期, ',', b.help_topic_id + 1 ), ',' ,- 1 ) AS 需开票日期 FROM report a JOIN mysql.help_topic b ON b.help_topic_id < ( length(a.需开票日期) - length( REPLACE (a.需开票日期, ',', '') ) + 1 ) where 需开票日期>DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and 需开票日期<=DATE_FORMAT(NOW(),'%Y-%m-%d') 请问有什么办法最后才执行where或分割完的结果集出来后再用where过滤吗? [/quote]你可以先查全局在加条件,效率上差但是应该可以实现: select tb.* from( select SUBSTRING_INDEX(SUBSTRING_INDEX(date, ',', help_topic_id+1),',',-1) _date,report.* from report left join mysql.help_topic ON help_topic_id < (LENGTH(date) - LENGTH(REPLACE(date, ',', '')) + 1) )tb where _date >= DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and _date <= DATE_FORMAT(NOW(),'%Y-%m-%d');
zijiang001 2019-06-27
  • 打赏
  • 举报
回复
SELECT * FROM( SELECT *, CASE WHEN LENGTH(需开票日期) > 10 THEN RIGHT(需开票日期,10) ELSE 需开票日期 END AS 日期 FROM report ) tmp WHERE 日期>DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m-%d') AND 日期<=DATE_FORMAT(NOW(),'%Y-%m-%d') 取了个巧,当需开票日期长度大于10的时候,取右边10个字符长度
ner_jiang 2019-06-27
  • 打赏
  • 举报
回复
可以试试GROUP_CONCAT聚合函数,select GROUP_CONCAT(开票日期) from table where 1=1 ..
Lxpeciali 2019-06-27
  • 打赏
  • 举报
回复
多写几层select嵌套即可,把where放最外层。
Leo201228 2019-06-21
  • 打赏
  • 举报
回复
引用 2 楼 _沉浮_ 的回复:
select SUBSTRING_INDEX(SUBSTRING_INDEX(date, ',', help_topic_id+1),',',-1) date,report.* from report left join mysql.help_topic ON help_topic_id < (LENGTH(date) - LENGTH(REPLACE(date, ',', '')) + 1) where date >=DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and date<=DATE_FORMAT(NOW(),'%Y-%m-%d')
你好并不行 这个方法我也试过 如果有逗号,两个日期在同一行的话会只先判断前面的日期 比如2017-07-01,2018-07-01 因为where是先执行过滤掉了,这里如果我只写12个月的话,这条日期是不会出来的 只有写24个月不被where过滤才会执行分割然后两条一起出来 以下是我的代码 SELECT substring_index( substring_index( a.需开票日期, ',', b.help_topic_id + 1 ), ',' ,- 1 ) AS 需开票日期 FROM report a JOIN mysql.help_topic b ON b.help_topic_id < ( length(a.需开票日期) - length( REPLACE (a.需开票日期, ',', '') ) + 1 ) where 需开票日期>DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and 需开票日期<=DATE_FORMAT(NOW(),'%Y-%m-%d') 请问有什么办法最后才执行where或分割完的结果集出来后再用where过滤吗?
_沉浮_ 2019-06-21
  • 打赏
  • 举报
回复
select SUBSTRING_INDEX(SUBSTRING_INDEX(date, ',', help_topic_id+1),',',-1) date,report.* from report left join mysql.help_topic ON help_topic_id < (LENGTH(date) - LENGTH(REPLACE(date, ',', '')) + 1) where date >=DATE_FORMAT(date_sub(NOW(), interval 12 MONTH), '%Y-%m-%d') and date<=DATE_FORMAT(NOW(),'%Y-%m-%d')
鱿鱼ing 2019-06-21
  • 打赏
  • 举报
回复
先把带逗号的字段 拆分成多行 再查吧
重复数据可以考虑用分组查出其 max(需开票日期)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧