我有两个数据库。一个人的名字有撇号,如奥班农,一个没有。我需要合并它们并找到重复项。因为添加撇号更难,所以我要删除它们
但是这......
UPDATE Client
SET Last_Name = REPLACE(''','')
显然不行。如何逃脱'。
我正在使用Xojo(不是PHP)
答案 0 :(得分:4)
就像你说的那样,你想要逃避引用字符。
请参阅string literals上的此文档:
有几种方法可以在字符串中包含引号字符:
引用“'”的字符串中的“'”可写为“''”。
引用“”“的字符串中的”“”可写为“”“”。
通过转义字符(“\”)来引用引号字符。
引用“”“的字符串中的”'“不需要特殊处理,也不需要加倍或转义。同样,”“中引用”'“的字符串内部不需要特殊处理。
根据您处理SQL的方式,您可能需要做更多的事情。如果应用程序正在转义引号字符,并将其传递给存储过程调用,则如果未使用与预准备语句的参数绑定,则可能会遇到相同的问题。这是因为MySQL在处理SP的输入时删除了转义字符。然后,未经证实的字符进入查询构造,如果它应该在那里转义,问题就会重复。在这种情况下,您需要切换到参数绑定,以便转义和查询构造不在您的手中。
答案 1 :(得分:3)
只需在引号前添加转义字符(\
):
SET Last_Name = REPLACE('\'','')
我仍然不认为这是正确的方法,因为您将丢失该人的原始姓名的信息,因此o'reily
和oreily
似乎是相同的姓氏你。
答案 2 :(得分:3)
我们走了:
UPDATE Client SET Last_Name = REPLACE(Last_Name, '\'', '');
你只需要逃避撇号就会反斜杠。
答案 3 :(得分:1)
表9.1。特殊字符转义序列
Escape Sequence Character Represented by Sequence
\0 An ASCII NUL (0x00) character.
\' A single quote (“'”) character.
\" A double quote (“"”) character.
\b A backspace character.
\n A newline (linefeed) character.
\r A carriage return character.
\t A tab character.
\Z ASCII 26 (Control+Z). See note following the table.
\\ A backslash (“\”) character.
\% A “%” character. See note following the table.
\_ A “_” character. See note following the table.
当然,如果未启用ANSI_MODE,您可以使用双引号
答案 4 :(得分:0)
如果您只是想要选择,即匹配包含撇号的数据的字段。
SELECT PhraseId FROM Phrase WHERE Text = REPLACE("don't", "\'", "''")