业务场景: 表中某个字段,表示问题单号,可能会存在多个问题单号,通过逗号进行拼接,比如 no0001,no0002,no0003 组成一个字段内容,那么我们就会存在一个这样的需求,需要将每个单号都取出来,用于后续的判断
可以利用mysql内置的表help_topic,存在一个help_topic_id 主键字段,从0开始到685,利用这么多个值,来进行遍历分割逗号拼接的问题单号串。注意就是如果逗号分割符都超过了686个了,那么就是不适用这种方式的,可以自定义一个表,也是从0开始的id字段,需要多少就定义插入多少。
举例:问题表单的 问题单号字段no,将其内容通过',' 分隔符依次转换出来, 这里也可以补充相应业务逻辑,where条件进行过滤。
SELECT
substring_index( substring_index( a._no, ',', b.help_topic_id + 1 ), ',', - 1 ) AS no
FROM
problem_f a
JOIN mysql.help_topic b ON b.help_topic_id < ( length( a._no ) - length( REPLACE ( a._no, ',', '' )) + 1 )
WHERE
DATE_FORMAT( _date, '%Y-%m-%d' ) >= DATE_FORMAT(
DATE_SUB( CURRENT_DATE, INTERVAL 1 MONTH ),
'%Y-%m-%d')
题外话: DATE_SUB( CURRENT_DATE, INTERVAL 1 MONTH ) 是取当前系统前一个月
select DATE_SUB( CURRENT_DATE, INTERVAL 1 MONTH ), CURRENT_DATE