0

MySQL データベースにインポートするデータのテキスト ファイルがあります。残念なことに、一部の行に引用符が含まれているため、SQL クエリがうまくいきません。引用符を含むフィールドを削除するか、少なくともクエリでそれらを無視したいと考えています。

動作する可能性のあるものを見つけましたが、これは Perl スクリプトを介して実行されるため、引用符の「エスケープ」に問題があります。私は本当に方法がわからず、それを理解することができません。テーブルを検索して、見つかった可能性のある引用符 (") を削除するか、一重引用符やスペースなどに置き換えたいと思います。

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

誰にもアイデアはありますか?

ありがとう!

4

3 に答える 3

1

このテーブルのクエリを UPDATE に変更します。

 update tablename set title = REPLACE(title,'\"','\'') where title like '%\"%'
于 2012-11-01T07:44:44.167 に答える
1

Perl には、この種の状況のた​​めにqand qq(引用符のような演算子) があります。使用する引用文字を選択できます。q単一引用符 ( ') のように機能し、補間 (変数を展開) しませんqqが、二重引用符 ( ") のように機能し、補間します。

my $replacequery = q{REPLACE(s.Title, '"','')};
于 2012-11-01T07:35:04.870 に答える
0

実際には、3 番目の引数に一重引用符で構成される文字列を渡したいのREPLACEですが、空の文字列を渡しています。必要な 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
于 2012-11-01T08:18:35.900 に答える