1

フォームデータの一部を適切にサニタイズしなかったクライアントのサイトで作業しています。特に、textareasから受け取った改行を説明するために何もしませんでした。したがって、何百ものdb行に\r\nand\r\n\r\n\r\n\r\n\r\n...があります。\r\nどういうわけか、データをクリーンアップする必要がある行だけを抽出する必要があります。しかし、私は一生の間、これらの行を選択するクエリを作成することはできません!どういうわけかスラッシュを逃れる必要があることに気づきましたが、うまくいきませんでした。

私は以下を試しました:

SELECT Id,Description FROM lakes WHERE Description LIKE '%\r\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\r\\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\\r\\\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\\\r\\\\n%';

もちろん、スラッシュを追加し続けることはできますが、4つのスラッシュがうまくいかない場合は、おそらく重要な何かが欠けているように感じます。

これらの各クエリは結果を返しますが、結果のいずれもが含まれているものではありません\r\n。最後のクエリ(4つのスラッシュを含む)は、を含む2つの行と\r\n、含まない138の追加行を返しました。

また、誰かがそれについて言及することを知っているので、私はについて知っていnl2br()ます。何らかの理由で、テーブルの生データを処理していません。今のところ、これらの行をプルしてクリーンアップできることを嬉しく思います。

前もって感謝します!

ジョシュ

4

3 に答える 3

1

これは、SQLが実際には得意ではないことの例です。

PHPを使用して、すべての行(または一度に20行)を返す単純なスクリプトを記述し、php正規表現を使用して目的の行を検索します。次に、データに対して必要な処理を行い、データベースを更新します。SQLは、必要なことを実行するのに十分なほど洗練されていません。PHPで実行する方がはるかに簡単です。

于 2012-08-23T23:02:32.943 に答える
0

Postgresqlでは以下を使用できます:

SELECT Id,Description FROM lakes WHERE Description LIKE E'%\r\n%';

https://www.postgresql.org/docs/current/sql-syntax-lexical.htmlを参照してください。

PostgreSQLは、SQL標準の拡張である「エスケープ」文字列定数も受け入れます。エスケープ文字列定数は、開始一重引用符の直前に文字E(大文字または小文字)を書き込むことによって指定されます(例:E'foo')。(行間でエスケープ文字列定数を継続する場合は、最初の開始引用符の前にのみEを記述します。)エスケープ文字列内で、バックスラッシュ文字()はCのようなバックスラッシュエスケープシーケンスを開始します。 )特別なバイト値を表す

于 2019-03-28T17:53:55.147 に答える
0
[Description] LIKE '%'+CHAR(10)+'%'
于 2021-01-21T07:45:26.927 に答える