"
我在 MySQL 中有一个字符串 (varchar)并希望将其处理\"
为不同的字符。我怎样才能做到这一点?
例子:
select locate('"', '\"Easy\" "');
答案是 1,我想要结果 10。
"
我在 MySQL 中有一个字符串 (varchar)并希望将其处理\"
为不同的字符。我怎样才能做到这一点?
例子:
select locate('"', '\"Easy\" "');
答案是 1,我想要结果 10。
\"
不是字符 - 它是"
字符串中的转义序列 - 并且\\\"
是字符序列的转义序列 \"
。
如果你想搜索字符序列 "
而不是,如果它在那里\"
,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
尽管您使用单引号作为分隔符,但双引号仍会被转义并仅视为双引号。如果您实际上将反斜杠保存在该字段中,则可以将其模拟为:
SELECT LOCATE('"', '\"Easy\" "');
编辑:忘记了 \" 不应该匹配。使用正则表达式,正如 Eugen 建议的那样。