如何从SQL中的字符串替换字符?

Wow*_*Bow 13 sql oracle replace

我的数据库中有100个单元格,?而不是'.这可能发生在所有行和列中,并且每个单元格可能出现多个单词.这是一个单元格的例子.

Parents? CUI assumed equal to the sum of the father?s/stepfather?s and mother?s/ stepmother?s income .
Run Code Online (Sandbox Code Playgroud)

我想编写一个SQL语句,查找包含的?每个单元格(每个单元格可能多于一个)并替换它们'.我确信所有人?都必须毫无例外地被替换.

我知道有一个函数替换但我不知道如何从sql中的字符串中提取字符.

这是我得到的一个例子,但它无法帮助我.

UPDATE dbo.authors

SET    city = replace(city, 'Salt', 'Olympic')
WHERE  city LIKE 'Salt%';
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jus*_*ave 16

您确定存储在数据库中的数据实际上是一个问号吗?我倾向于从样本数据中怀疑问题是字符集转换之一,?当字符无法在客户端字符集中表示时,它被用作替换字符.可能,数据库实际上存储的是Microsoft"智能引号"字符而不是简单的撇号.

什么是DUMP性能表现实际上是存储在数据库中?

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

您使用什么应用程序来查看数据?客户的NLS_LANG设定是什么?

什么是数据库和国家字符集?数据是否存储在一VARCHAR2列中?还是NVARCHAR2

SELECT parameter, value
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';
Run Code Online (Sandbox Code Playgroud)

如果所有问题字符都存储在数据库中为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
Run Code Online (Sandbox Code Playgroud)


Jes*_*ing 15

UPDATE databaseName.tableName
SET columnName = replace(columnName, '?', '''')
WHERE columnName LIKE '%?%'
Run Code Online (Sandbox Code Playgroud)


Cur*_*urt 7

这将替换所有?':

UPDATE dbo.authors    
SET    city = replace(city, '?', '''')
WHERE city LIKE '%?%'
Run Code Online (Sandbox Code Playgroud)

如果需要更新多个列,可以在city每次执行时更改为不同的列名,也可以列出如下列:

UPDATE dbo.authors    
SET    city = replace(city, '?', '''')
      ,columnA = replace(columnA, '?', '''')
WHERE city LIKE '%?%'
OR columnA LIKE '%?%'
Run Code Online (Sandbox Code Playgroud)