替换字符串中的撇号

时间:2013-05-17 21:34:20

标签: mysql

我有两个数据库。一个人的名字有撇号,如奥班农,一个没有。我需要合并它们并找到重复项。因为添加撇号更难,所以我要删除它们

但是这......

UPDATE Client
SET Last_Name = REPLACE(''','')

显然不行。如何逃脱'。

我正在使用Xojo(不是PHP)

5 个答案:

答案 0 :(得分:4)

就像你说的那样,你想要逃避引用字符。

请参阅string literals上的此文档:

  

有几种方法可以在字符串中包含引号字符:

     
    

引用“'”的字符串中的“'”可写为“''”。

         

引用“”“的字符串中的”“”可写为“”“”。

         

通过转义字符(“\”)来引用引号字符。

         

引用“”“的字符串中的”'“不需要特殊处理,也不需要加倍或转义。同样,”“中引用”'“的字符串内部不需要特殊处理。

  

根据您处理SQL的方式,您可能需要做更多的事情。如果应用程序正在转义引号字符,并将其传递给存储过程调用,则如果未使用与预准备语句的参数绑定,则可能会遇到相同的问题。这是因为MySQL在处理SP的输入时删除了转义字符。然后,未经证实的字符进入查询构造,如果它应该在那里转义,问题就会重复。在这种情况下,您需要切换到参数绑定,以便转义和查询构造不在您的手中。

答案 1 :(得分:3)

只需在引号前添加转义字符(\):

  

SET Last_Name = REPLACE('\'','')

我仍然不认为这是正确的方法,因为您将丢失该人的原始姓名的信息,因此o'reilyoreily似乎是相同的姓氏你。

答案 2 :(得分:3)

我们走了:

UPDATE Client SET Last_Name = REPLACE(Last_Name, '\'', '');

你只需要逃避撇号就会反斜杠。

答案 3 :(得分:1)

来自9.1.1 String Literals

表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", "\'", "''")