Заменете кавичките в sql заявка в perl скрипт

Имам текстов файл с данни, които импортирам в MySQL база данни. Някои от редовете за съжаление съдържат кавички, което кара моите SQL заявки да се объркват. Бих искал да се отърва от всяко поле, което има кавички, или най-малкото да ги игнорирам в моята заявка.

Намерих нещо, което може да работи, но тъй като това се изпълнява чрез скрипт на Perl, имам проблеми с "бягството" от кавичките. Наистина не знам как и не мога да го разбера. Бих искал просто да потърся в моята таблица и да изтрия всички кавички ("), които може да намери, или да ги заменя с единични кавички или интервал, или нещо наистина.

my $myreplacequery = "REPLACE(s.Title, '"','')";
$sth = $dbh->prepare($myreplacequery);
$sth->execute;

Някой има ли идеи?

Благодаря!


person user1026801    schedule 01.11.2012    source източник
comment
Можете ли да редактирате my $replacequery до $myreplacequery?   -  person Asad Saeeduddin    schedule 01.11.2012
comment
Можете ли да публикувате примерен код, който се обърква?   -  person RobEarl    schedule 01.11.2012
comment
Не мога да накарам това да работи, така че реших просто да използвам perl, за да намеря/заменя кавички във файла, който първоначално въвеждам в таблиците, преди дори да стигне до SQL. Надяваме се, че това ще проработи, все още не мога да кажа.   -  person user1026801    schedule 08.11.2012


Отговори (3)


Променете заявката на UPDATE в тази таблица:

 update tablename set title = REPLACE(title,'\"','\'') where title like '%\"%'
person sufleR    schedule 01.11.2012

Perl има q и qq (подобни на кавички оператори) за този вид ситуация. Те ви позволяват да изберете символа за цитат, който да използвате. q действа като единични кавички (') и не интерполира (разширява променливи), докато qq действа като двойни кавички (") и го прави.

my $replacequery = q{REPLACE(s.Title, '"','')};
person RobEarl    schedule 01.11.2012

Всъщност искате да предадете низ, състоящ се от единични кавички към REPLACE за неговия 3-ти аргумент, но предавате празен низ. Необходимият SQL е:

REPLACE(s.Title, '"', '\'') 

За да създадете този низ в Perl, можете да използвате някой от следните низови литерали:

"REPLACE(s.Title, '\"', '\\'')"    # Produces: REPLACE(s.Title, '"', '\'')

qq{REPLACE(s.Title, '"', '\\'')}   # Produces: REPLACE(s.Title, '"', '\'')

Забележете как " трябва да бъде екраниран. Без него Perl би видял следния низов литерал (последван от нежелан):

"REPLACE(s.Title, '"
^                  ^
|                  |
start              end
of string          of string
literal            literal
person ikegami    schedule 01.11.2012