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

时间:2012-03-08 17:09:10

标签: sql oracle replace

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

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

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

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

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

UPDATE dbo.authors

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

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

您确定存储在数据库中的数据实际上是一个问号吗?我倾向于从示例数据中怀疑问题是字符集转换中的问题,其中?被用作替换字符,当字符无法在客户端字符集中表示时。可能,数据库实际上存储了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

答案 1 :(得分:15)

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

答案 2 :(得分:7)

这会将所有?替换为'

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

答案 3 :(得分:1)

使用REPLACE功能。

例如:SELECT REPLACE(&#39; t?es?t&#39;,&#39;?&#39;,&#39; w&#39;);

Source