2013-05-17 3 views
1

У меня две базы данных. У одного есть апостроф в таких именах, как О'Бэннон, а другой нет. Мне нужно объединить их и найти дубликаты. Так как это трудно, чтобы добавить апостроф я Тринга удалить их вместоЗамена апострофа в строке

Но это ...

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

Явно не будет работать. Как избежать ".

Я использую Xojo (не PHP)

+2

'REPLACE ('\' ',' ')', чтобы непосредственно ответить на ваш вопрос. –

+3

Почему вы хотите изменить фамилию кого-то? –

+2

Вы не хотите OBannon, вы хотите О'Бэннона. Базы данных вполне способны хранить апострофы! –

ответ

4

Как вы говорите, вам захочется избежать персонажей цитат.

Смотрите эту документацию на string literals:

Есть несколько способов включить кавычки в строку:

А ««»внутри строки, заключенной в двойные кавычки«»» может быть записана в виде «'».

Внутри строки, обозначенной буквой "" ", может быть указано как" "" ".

Прецизионный символ символа пробега ("\").

«Внутри строки, указанной в« »,« нет необходимости в специальной обработке и ее не нужно удваивать или избегать. Точно так же «» внутри строки, цитируемой «», не нуждается в особой обработке.

В зависимости от того, как вы имеете дело с SQL, хотя, возможно, придется сделать больше, чем это. Если приложение избегает символа кавычки и передает его вызову хранимой процедуры, вы можете столкнуться с тем же вопросом, если не используете привязку параметров к подготовленным операторам. Это связано с тем, что MySQL удаляет escape-символ при обработке входов SP. Затем нестандартный символ прокладывает путь к построению запроса, и проблема повторяется, если ее следует избегать.В этом случае вы захотите переключиться на привязку параметров, так что построение экранирования и запроса будет из ваших рук.

+0

Для получения дополнительной информации о SQL-инъекции см. [Этот отличный ответ на Bill Karwin] (http://stackoverflow.com/a/306818/2272443) и [это слайд-шоу, которое он собрал вместе] (http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies) , –

3

Просто добавьте экранирующий символ (\) перед цитатой:

SET Last_Name = ЗАМЕНИТЬ ('\'», '')

Тем не менее, я не думаю, что это правильный путь, как вы потеряете информацию для оригинального имени человека, и поэтому o'reily и oreily будет казаться такой же фамилией к вам.

+0

Они не потеряют информацию, они потеряют ее, что еще хуже. – glglgl

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 не включен, вы можете использовать двойные кавычки

+0

У меня есть две базы данных, которые я не имел никакого отношения к созданию. У одного апострофа нет. Мне нужно объединить их и найти дубликаты. Если бы вы могли написать мне какой-то код, который помещает их туда, где они отсутствуют, я бы с удовольствием воспринял все комментарии «не меняйте имя» на сердце .... – JVMX

3

Здесь мы идем:

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

Вам просто нужно, чтобы избежать апостроф будет обратной косой черты.

0

Если в случае, если вы просто хотите выбрать, т. Е., Чтобы соответствовать полю с данными, содержащими апостроф.

SELECT PhraseId FROM Phrase WHERE Text = REPLACE("don't", "\'", "''") 
Смежные вопросы