我正在进行MySQL查询,我需要在长字符串中匹配两个字符串,但无法使其工作。这就是我尝试过的。
SELECT * FROM mytable WHERE (mycol REGEXP '/~20\|2~/' AND mycol REGEXP '/~14\|1~/')
这是字符串的样子
~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~
我想选择包含这两个子串的所有行
~20|2~ AND ~14|1~
我做错了什么?
答案 0 :(得分:1)
请检查一下,thsi只选择包含两个字符串的行。
原因在于您的原始正则表达式不起作用:
查询:
SELECT * FROM vendor
WHERE (vname REGEXP '~20\\|2~'
AND vname REGEXP '~14\\|1~')
;
查询:请注意,我使用了与您不同的表/样本数据。但复制了您的数据行并进行了一些更改以触发正确的regex
。
示例数据:
| VID | VNAME |
------------------------------------------------------------
| 1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
| 2 | ~20|2~14|1397|1|0:0:0:0||~17|1~18|1~ |
| 3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
| 4 | ~20|2~1|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
查询:
SELECT * FROM vendor
WHERE (vname REGEXP '~20\[|]2~'
AND vname REGEXP '~14\[|]1~')
;
结果:
| VID | VNAME |
------------------------------------------------------------
| 1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
| 3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
答案 1 :(得分:0)