我需要从可以包含特殊字符的字段中进行选择,例如
+--------------+
| code |
+--------------+
| **4058947"_\ |
| **4123/"_\ |
| sew'-8947"_\ |
+--------------+
我试试这个
select code from table where code REGEXP '[(|**4058947"_\|)]';
select code from table where code REGEXP '[(**4058947"_\)]';
select code from table where code REGEXP '^[(**4058947"_\)]';
但查询返回所有行,此查询返回空
select code from table where code REGEXP '^[(**4058947"_\)]$';
我只需要返回第一个或指定的
答案 0 :(得分:0)
要只选择一行,如果它与哪一行无关,你可以这样做。
SELECT code FROM table LIMIT 1
如果确实重要,请删除正则表达式。
SELECT code FROM table WHERE code = "**4058947\"_\\"
要匹配这些特殊字符(在本例中为"
和\
),您需要"转义"他们。 (这就是它的调用方式。我没有做到这一点。)在大多数主流语言中,这是通过在它前面加一个反斜杠来完成的(MySQL也是这样做的)。反斜杠是转义字符,后面带有另一个字符的反斜杠称为转义序列。正如你所看到的,我在代码值中反复引用和反斜杠,所以它现在可以正常工作。
如果你需要保留正则表达式(我希望不是这种情况,因为你有想要匹配的文字字符串)同样适用。退出引号和反斜杠,如果你放下括号和括号,你就可以了。请注意,在正则表达式中,您需要转义更多字符。这是因为某些字符(例如:| [] () * +
在正则表达式中有一个特殊的功能。这非常方便,但是当你需要匹配字符串中的字符时会变得有点问题。在这种情况下,你需要逃避它,但有一个双反斜杠!这是因为MySQL首先解析查询,如果它遇到一个无效的转义序列将抛出一个错误(也就是说,如果你逃脱一个你不需要逃脱的角色只有这样才能将结果解析为正则表达式,双反斜杠替换为单个反斜杠。这很快变得难看,因为这意味着匹配反斜杠与MySQL正则表达式需要4个反斜杠!正则表达式中有两个,但是这个需要加倍,因为MySQL首先将其解析为字符串!