我的数据库中有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%';
有什么想法吗?
答案 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)