You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL查找含ASCII 49828特殊字符的值并替换为普通空格的方法

查找包含ASCII 49828特殊字符的字段值

Oracle中可以通过CHR()函数将ASCII码转换为对应字符,直接匹配即可,不需要硬编码特殊字符避免编码兼容问题:

  • 单表指定列查询:
SELECT * FROM 你的表名 
WHERE INSTR(你的列名, CHR(49828)) > 0;
  • 如果需要批量排查多个表的多个字段,可以通过动态SQL实现,示例如下:
DECLARE
  v_search_char CHAR(1) := CHR(49828);
  v_count NUMBER;
BEGIN
  FOR rec IN (SELECT table_name, column_name FROM user_tab_columns WHERE data_type IN ('CHAR', 'VARCHAR2', 'CLOB')) LOOP
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||rec.table_name||' WHERE INSTR('||rec.column_name||', :1) > 0' INTO v_count USING v_search_char;
    IF v_count > 0 THEN
      DBMS_OUTPUT.PUT_LINE('表 '||rec.table_name||' 列 '||rec.column_name||' 存在'||v_count||'条包含特殊字符的记录');
    END IF;
  END LOOP;
END;
/

执行前需要先开启服务器输出:SET SERVEROUTPUT ON;

替换ASCII 49828为普通空格(ASCII 32)
  • 临时查询替换(不修改原数据,仅返回清洗后的结果):
SELECT REPLACE(你的列名, CHR(49828), CHR(32)) AS 清洗后列名
FROM 你的表名;
  • 永久修改原表数据:
    注意:执行UPDATE前建议先备份对应数据,或者开启事务验证修改结果无误后再提交
UPDATE 你的表名
SET 你的列名 = REPLACE(你的列名, CHR(49828), CHR(32))
WHERE INSTR(你的列名, CHR(49828)) > 0;
-- 验证修改无误后执行COMMIT提交
COMMIT;

如果需要批量替换多表多列的该特殊字符,可参考上面的动态SQL逻辑调整实现即可。

内容的提问来源于stack exchange,提问作者Imran Hemani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:48:01