2

我有两个数据库。一个像 O'Bannon 这样的名字中有撇号,一个没有。我需要合并它们并找到重复项。由于添加撇号更难,我试图删除它们

但是这个...

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

显然行不通。一个人如何逃脱'.

我正在使用 Xojo(不是 PHP)

4

5 回答 5

5

就像你说的,你会想要转义引号字符。

请参阅有关字符串文字的文档:

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

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

用“"”引用的字符串中的“"”可以写成“""”。

在引号字符前加上转义字符 (“\”)。

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

但是,根据您处理 SQL 的方式,您可能需要做的还不止这些。如果应用程序正在转义引号字符,并将其传递给存储过程调用,那么如果您没有将参数绑定与准备好的语句一起使用,您可能会遇到同样的问题。这是由于 MySQL 在处理 SP 的输入时删除了转义字符。然后未经处理的字符进入查询构造,如果应该在那里转义,问题就会重复。在这种情况下,您需要切换到参数绑定,以便转义和查询构造不在您的掌控之中。

于 2013-05-17T21:44:34.093 回答
4

开始了:

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

您只需要转义撇号将反斜杠。

于 2013-05-17T21:41:18.713 回答
3

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

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

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

于 2013-05-17T21:37:05.560 回答
1

9.1.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未启用,您可以使用双引号

于 2013-05-17T21:37:59.733 回答
0

如果您只是想选择,即,将字段与包含撇号的数据匹配。

SELECT PhraseId FROM Phrase WHERE Text =  REPLACE("don't", "\'", "''")
于 2014-02-03T08:20:46.723 回答