Как заменить символ из строки в SQL?

у меня есть 100 ячеек в нашей базе данных, которые содержат ? вместо '. Возможно, это может произойти во всех строках и столбцах и более чем в одном слове на ячейку. Вот пример только одной клетки.

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

Я хочу написать инструкцию SQL, которая находит все ячейки, содержащие ? (может быть более одного на ячейку) и замените их на '. Я уверен, что все ? должны быть заменены без исключения.

Я знаю существует функция replace, но я не мог знать, как извлечь символ из строки в sql.

это один пример, который я получил, но он не мог мне помочь.

UPDATE dbo.authors

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

какие идеи?

4 ответов


вы уверены, что данные, хранящиеся в базе данных, является на самом деле вопросительный знак? Я бы заподозрил из примеров данных, что проблема заключается в преобразовании набора символов, где ? используется в качестве символа замены, когда символ не может быть представлен в наборе символов клиента. Возможно, база данных фактически хранит символы Microsoft "smart quote", а не простые апострофы.

что значит DUMP функция show фактически сохраняется в базе данных?

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

какое приложение вы используете для просмотра данных? Что такое клиент NLS_LANG установить?

что такое база данных и Национальный набор символов? Хранятся ли данные в ? Или NVARCHAR2?

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

если все проблемные символы хранятся в базе данных как 0x19 (decimal 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

UPDATE databaseName.tableName
SET columnName = replace(columnName, '?', '''')
WHERE columnName LIKE '%?%'

это заменит все ? С ':

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 '%?%'

используйте функцию REPLACE.

например: выберите заменить ('t?Эс?Т', '?', 'w');

источник