我有两个数据库。一个像 O'Bannon 这样的名字中有撇号,一个没有。我需要合并它们并找到重复项。由于添加撇号更难,我试图删除它们
但是这个...
UPDATE Client
SET Last_Name = REPLACE(''','')
显然行不通。一个人如何逃脱'.
我正在使用 Xojo(不是 PHP)
我有两个数据库。一个像 O'Bannon 这样的名字中有撇号,一个没有。我需要合并它们并找到重复项。由于添加撇号更难,我试图删除它们
但是这个...
UPDATE Client
SET Last_Name = REPLACE(''','')
显然行不通。一个人如何逃脱'.
我正在使用 Xojo(不是 PHP)
就像你说的,你会想要转义引号字符。
请参阅有关字符串文字的文档:
有几种方法可以在字符串中包含引号字符:
用“'”引用的字符串中的“'”可以写成“''”。
用“"”引用的字符串中的“"”可以写成“""”。
在引号字符前加上转义字符 (“\”)。
用“"”引用的字符串中的“'”不需要特殊处理,也不需要加倍或转义。同样,用“'”引用的字符串中的“"”不需要特殊处理。
但是,根据您处理 SQL 的方式,您可能需要做的还不止这些。如果应用程序正在转义引号字符,并将其传递给存储过程调用,那么如果您没有将参数绑定与准备好的语句一起使用,您可能会遇到同样的问题。这是由于 MySQL 在处理 SP 的输入时删除了转义字符。然后未经处理的字符进入查询构造,如果应该在那里转义,问题就会重复。在这种情况下,您需要切换到参数绑定,以便转义和查询构造不在您的掌控之中。
开始了:
UPDATE Client SET Last_Name = REPLACE(Last_Name, '\'', '');
您只需要转义撇号将反斜杠。
只需\
在引号前添加一个转义字符():
SET Last_Name = REPLACE('\'','')
我仍然认为这不是正确的方法,因为您将丢失该人的原始姓名的信息,因此o'reily
对oreily
您来说似乎是同一个姓氏。
表 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未启用,您可以使用双引号
如果您只是想选择,即,将字段与包含撇号的数据匹配。
SELECT PhraseId FROM Phrase WHERE Text = REPLACE("don't", "\'", "''")