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