我有一个在文本列,如“1,2,5,10”一个ID设置一个坏投影数据库。 我需要让它们通过同样的方法设置两列的交叉点。 我不喜欢使用PHP或其他脚本语言来做到这一点,我也不会像MySQL的自定义函数。 有没有什么办法让通过逗号分隔符的字符串给出了两个集合的交集?
其实我并不需要有充分的交集,我只需要知道的是有两套相同的数字。 如果是的话,我需要有“1”,如果没有相同的数字,我需要有“0”。
谢谢。
我有一个在文本列,如“1,2,5,10”一个ID设置一个坏投影数据库。 我需要让它们通过同样的方法设置两列的交叉点。 我不喜欢使用PHP或其他脚本语言来做到这一点,我也不会像MySQL的自定义函数。 有没有什么办法让通过逗号分隔符的字符串给出了两个集合的交集?
其实我并不需要有充分的交集,我只需要知道的是有两套相同的数字。 如果是的话,我需要有“1”,如果没有相同的数字,我需要有“0”。
谢谢。
您可以使用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
。 该(\,|$)
位对逗号或字符串的结尾匹配。 希望这可以帮助...
从史蒂夫的代码并不适用于所有情况。 对于前当了许多可以在另一个号码发现这是行不通的。 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