0

一部の文字列フィールドに印刷できない文字が含まれているように見える Sybase データベースを使用していますが、これにより処理コードの一部が失われています。一見、改行とキャリッジ リターンのみのように見えますが、そこには ASCII コード 27 もあります。ESC 文字、いくつかのアクセント付き文字、およびその他の奇妙な文字が含まれています。

データベースを変更するための直接アクセス権がないため、不良データを変更することはまだオプションではありません。今のところ、私はそれをフィルタリングするだけで間に合わせる必要があります. あるデータベースからテーブル データをエクスポートし、夜間のバッチ プロセスで別のアプリケーションが使用するデータベースにロードしようとしています。

理想的には、文字のリストを渡して、Sybase にそれらの文字を削除したデータを返すだけの関数が欲しいです。可能であれば、プレーン SQL でできることを維持したいと思います。

ASCII 0 - 31 の文字を削除するには、次のようにします。

TABLE から FIELD1 として str_replace(FIELD1, (0-31), NULL) を選択し、FIELD2 として str_replace(FIELD2, (0-31), NULL) を選択します

これまでのところ、str_replace は私が見つけることができる最も近いものですが、ある文字列を別の文字列に置き換えることしかできません。文字範囲はサポートされておらず、上記のことはできません。

Unixサーバー上のSybase ASE 12.5で実行しています。

4

1 に答える 1

1

次のようなものは、Sybase のような T-SQL を使用する SQL Server で機能します。

while @@ROWCOUNT > 0
    UPDATE TheTable
    SET strColumn = REPLACE(strColumn, SUBSTRING(strColumn, 
        PATINDEX('%[^a-zA-Z0-9 ]%', 
        strColumn collate Latin1_General_BIN), 1), '')
    WHERE PATINDEX('%[^a-zA-Z0-9 ]%', 
        strColumn collate Latin1_General_BIN) <> 0

少なくとも、Sybase には patindex 関数が存在するようです

照合はバイナリと一致する必要があります。それ以外の場合[a]は「á」に一致します。

于 2010-02-10T21:52:52.337 に答える