-3

"我在 MySQL 中有一个字符串 (varchar)并希望将其处理\"为不同的字符。我怎样才能做到这一点?

例子:

select locate('"', '\"Easy\" "'); 

答案是 1,我想要结果 10。

4

2 回答 2

2

\"不是字符 - 它是"字符串中的转义序列 - 并且\\\"字符序列的转义序列 \"

如果你想搜索字符序列 "而不是,如果它在那里\",AREGEXP至少会给你答案:

SELECT '\\\"Easy\\\" \"' REGEXP '[^\\]\"'; -- gives 1
SELECT '\\\"Easy\\\" x' REGEXP '[^\\]\"'; -- gives 0

编辑

只是为了消除对转义引号的混淆:

  • 引号内,双引号的转义是可选'\"'的:与'"'
  • 引号内,单引号的转义是可选"\'"的:与"'"

强烈建议始终使用转义,即使它是可选的。

编辑 2

@Dukeling 指出,我忘记了以 . 开头的字符串的边缘情况"。这修复了它:

SELECT '\\\"Easy\\\" x' REGEXP '([^\\]|^)\"'; --gives 0
SELECT '\\\"Easy\\\" \"' REGEXP '([^\\]|^)\"'; --gives 1
SELECT 'x \\\"Easy\\\"' REGEXP '([^\\]|^)\"'; --gives 0
SELECT '\" \\\"Easy\\\"' REGEXP '([^\\]|^)\"'; --gives 1
于 2013-05-28T10:23:59.600 回答
0

尽管您使用单引号作为分隔符,但双引号仍会被转义并仅视为双引号。如果您实际上将反斜杠保存在该字段中,则可以将其模拟为:

SELECT LOCATE('"', '\"Easy\" "');

编辑:忘记了 \" 不应该匹配。使用正则表达式,正如 Eugen 建议的那样。

于 2013-05-28T10:16:59.170 回答