0

我正在做一个 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~

我究竟做错了什么?

4

2 回答 2

1

请检查一下,这只是选择包含两个字符串的行。

  • 编辑:

您原来的正则表达式不起作用的原因是:

Because MySQL uses the C escape syntax in strings (for example, “\n” to represent the newline character), you must double any “\” that you use in your REGEXP strings.

询问:

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~ |
于 2013-01-12T08:31:14.857 回答
0

你试过这个吗?

SELECT * FROM mytable WHERE (mycol REGEXP '~20\|2~' AND mycol REGEXP '~14\|1~')

SQL小提琴

于 2013-01-12T07:28:01.197 回答