替换具有特殊字符的列值

时间:2018-01-09 17:01:21

标签: sql oracle

我有一个包含列的表,并且插入了数据,在数据中有一些字符,例如

输出应该是这样的

column name :Name   
value 1: andrew-jr  
value 2 :john-doctor  

但我得到它

Name     
andrewâ€jr  
johnâ€doctor  

-已被â€字符

取代

1 个答案:

答案 0 :(得分:3)

您的字符串包含CHR(226)CHR(128)

您可以使用TRANSLATEREPLACE

select TRANSLATE  ( 'â€', CHR(226)||CHR(128), '-')  FROM DUAL;

产生-(在SQL开发人员中测试)

因此,要更新列(在执行此操作之前仔细检查),请使用

UPDATE yourtable
    SET
        columnname = translate(columnname,CHR(226)
        || CHR(128),'-')
WHERE
    columnname LIKE '%'
    || CHR(226)
    || CHR(128)
    || '%';

要获取所有字符和CHR值的完整列表,请使用以下任何一种。

SELECT
    level i,
    chr(level) str
FROM
    dual
CONNECT BY
    level <= 255;

OR

SET SERVEROUTPUT ON
BEGIN
    FOR i IN 1..255 LOOP
        dbms_output.put_line(chr(i)
        || ' == '
        || i);
    END LOOP;
END;
/