MySQL的字符串来设置和获取交集(MySQL string to set and get inte

2019-06-27 23:31发布

我有一个在文本列,如“1,2,5,10”一个ID设置一个坏投影数据库。 我需要让它们通过同样的方法设置两列的交叉点。 我不喜欢使用PHP或其他脚本语言来做到这一点,我也不会像MySQL的自定义函数。 有没有什么办法让通过逗号分隔符的字符串给出了两个集合的交集?

其实我并不需要有充分的交集,我只需要知道的是有两套相同的数字。 如果是的话,我需要有“1”,如果没有相同的数字,我需要有“0”。

谢谢。

Answer 1:

您可以使用REGEXP有位聪明的更换来做到这一点。

认为这应该这样做(免责声明:没有广泛的测试吧):

SELECT col1,
       col2,
       CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS regex,
       col1 REGEXP CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS intersect
FROM tbl

见http://sqlfiddle.com/#!2/7b86f/3

为了解释:该功能可将col2为正则表达式针对匹配col1 。 该(\,|$)位对逗号或字符串的结尾匹配。 希望这可以帮助...



Answer 2:

从史蒂夫的代码并不适用于所有情况。 对于前当了许多可以在另一个号码发现这是行不通的。 INSERT INTO TBL(COL1,COL2)VALUES('60,61,64,68,73' ,'14,16,17,18,1' ); 随着一点点的调整它可以工作:

SELECT col1,
col2,
CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS regex,
CONCAT(',',col1,',') REGEXP CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS intersect
FROM tbl


文章来源: MySQL string to set and get intersection