Подтвердить что ты не робот

Как заменить символ из строки в 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%';

Любые идеи?

4b9b3361

Ответ 1

Вы уверены, что данные, хранящиеся в базе данных, фактически являются вопросительным знаком? Я бы предпочел предположить, что из данных выборки проблема заключается в преобразовании набора символов, где ? используется в качестве замещающего символа, когда символ не может быть представлен в наборе символов клиента. Возможно, база данных фактически хранит символы "умной цитаты" 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 (десятичное значение 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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

например: SELECT REPLACE ('t? es? t', '?', 'w');

Источник