web-dev-qa-db-ja.com

SQLの文字列から文字を置き換える方法は?

データベースには、?の代わりに'を含む100個のセルがあります。これは、すべての行と列、およびセルごとに複数のWordで発生する可能性があります。これは、1つのセルの例です。

Parents? CUI assumed equal to the sum of the father?s/stepfather?s and mother?s/ stepmother?s income .

?(セルごとに複数の場合があります)を含むすべてのセルを検索し、'に置き換えるSQLステートメントを記述したいと思います。 ?はすべて例外なく交換する必要があると確信しています。

関数の置換があることは知っていますが、SQLの文字列から文字を抽出する方法がわかりませんでした。

これは私が得た1つの例ですが、それは私を助けることができませんでした。

UPDATE dbo.authors

SET    city = replace(city, 'Salt', 'Olympic')
WHERE  city LIKE 'Salt%';

何か案は?

13
WowBow

データベースに保存されているデータが実際に疑問符であると確信していますか?サンプルデータから、問題は?は、クライアントの文字セットで文字を表現できない場合に置換文字として使用されています。おそらく、データベースには、単純なアポストロフィではなく、Microsoftの「スマートクォート」文字が実際に格納されています。

DUMP関数が実際にデータベースに保存するものは何ですか?

SELECT column_name,
       dump(column_name,1016)
  FROM your_table
 WHERE <<predicate that returns just the sample data you posted>>

データを表示するためにどのアプリケーションを使用していますか?クライアントのNLS_LANG に設定?

データベースと国別文字セットとは何ですか?データはVARCHAR2列?またはNVARCHAR2

SELECT parameter, value
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';

すべての問題の文字がデータベースに0x19(10進数の25)として保存されている場合、REPLACEは次のようにする必要があります。

UPDATE table_name
   SET column1 = REPLACE(column1, chr(25), q'[']'),
       column2 = REPLACE(column2, chr(25), q'[']'),
       ...
       columnN = REPLACE(columnN, chr(25), q'[']')
 WHERE INSTR(column1,chr(25)) > 0
    OR INSTR(column2,chr(25)) > 0 
    ...
    OR INSTR(columnN,chr(25)) > 0
16
Justin Cave
UPDATE databaseName.tableName
SET columnName = replace(columnName, '?', '''')
WHERE columnName LIKE '%?%'
15
JesseBuesking

これにより、すべての? with '

UPDATE dbo.authors    
SET    city = replace(city, '?', '''')
WHERE city LIKE '%?%'

複数の列を更新する必要がある場合は、異なる列名に実行するたびにcityを変更するか、次のように列をリストできます。

UPDATE dbo.authors    
SET    city = replace(city, '?', '''')
      ,columnA = replace(columnA, '?', '''')
WHERE city LIKE '%?%'
OR columnA LIKE '%?%'
7
Curt

REPLACE関数を使用します。

例:SELECT REPLACE( 't?es?t'、 '?'、 'w');

ソース

1
user3781264