MySQL中查找包含嵌套双引号的字符串行的方法咨询
在MySQL中查找包含内部双引号的双引号包裹字符串
嘿,这个问题其实是MySQL字符串处理里很常见的场景——当你需要存储本身带双引号的字符串时,MySQL会通过转义来区分引号层级,所以查找的时候得对应这个规则来。
下面给你两种靠谱的实现方法,你可以根据自己的情况选:
方法1:使用LIKE匹配
如果你的字符串在存储时是规范转义的(比如实际存储为 This is \"my\" example.),可以用LIKE来匹配开头和结尾的双引号,同时匹配中间的转义双引号:
SELECT * FROM your_table WHERE your_column LIKE '"%"\\"%"'
这里的逻辑是:
"匹配开头的双引号%匹配开头引号后的任意内容\\"匹配转义后的内部双引号(MySQL里需要两个反斜杠,因为第一个会被解析为转义符)- 最后一个
"匹配结尾的双引号
方法2:使用正则表达式REGEXP
如果你需要更灵活的匹配,正则表达式会更合适,同样针对转义后的存储场景:
SELECT * FROM your_table WHERE your_column REGEXP '^".*\\"".*"$'
正则的拆解:
^"确保字符串以双引号开头.*匹配开头引号后的任意字符(零个或多个)\\""匹配转义后的内部双引号.*匹配内部引号后的任意字符"$确保字符串以双引号结尾
特殊情况:未转义的错误存储
如果你的数据是不规范存储的(比如直接存了 This is "my" example.,这种情况其实插入时大概率会报错或截断内容),可以用下面的语句排查,但更建议你规范插入逻辑,避免这种情况:
SELECT * FROM your_table WHERE your_column LIKE '"%"%"' AND your_column NOT LIKE '"%"'
这个语句会匹配开头是双引号、中间还有至少一个双引号、结尾不是第一个双引号后的内容的行,但这种情况属于数据异常,最好从插入环节解决。
记得把上面的 your_table 和 your_column 替换成你实际的表名和列名哦!
内容的提问来源于stack exchange,提问作者Hemant Singh
相关产品推荐
相关产品推荐

