PostgreSQL去掉表中所有不可见字符

前端之家收集整理的这篇文章主要介绍了PostgreSQL去掉表中所有不可见字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

问题描述

数据库中的某些数据中包含了某些不可见字符。ASCII码中的0-31,127属于控制字符,不可见,详情见wiki–控制字符

这些不可见字符往往是不需要的,我们要想办法删除它。


解决办法

写一函数,将所有字段中的不可见字符替换为空格。


测试流程

环境准备

建表,并插入带不可见字符的记录。注:下列数据中的不可见字符在粘贴过来的时候自动去掉了,请按ALT+数字键加入。

CREATE TABLE public.test_table ( xm character varying(50),pinyin character varying(200),sm character(15) ) WITH ( OIDS=FALSE );
ALTER TABLE public.test_table OWNER TO postgres;


-- ----------------------------
-- Records of test_table
-- ----------------------------
INSERT INTO ry_syrk_copy VALUES ('周小星xx','xx测试','测试' );
INSERT INTO ry_syrk_copy VALUES ('李华','测试xx','世xx界' );

注:因不可见字符无法在CSDN中无法打出,故用xx代替。实际上在其它地方可以用ALT+数字键打印出来。

去掉表中所有的不可见字符

-- 函数说明:将表test_table中所有的不可见字符替换掉
CREATE OR REPLACE FUNCTION delete_special_char() RETURNS int8 AS $$ DECLARE row RECORD;      
BEGIN -- 查询表中所有类型为字符串的列 FOR row in select column_name from information_schema.columns where table_name = 'test_table' and data_type like 'character%' LOOP FOR i IN 1..31 LOOP --替换所有的不可见字符为空格(除了chr(0)之外) EXECUTE 'update test_table set ' || row.column_name || ' = replace(' || row.column_name || ',chr(' || i || '),'' '' )';
    END LOOP;           
END LOOP;

RETURN 1;

END;

$$ LANGUAGE plpgsql;

执行函数

执行函数select * from delete_special_char(),之后查看表数据,所有的不可见字符都被替换为空格。


补充–如何删除chr(0)

值得注意的是上述函数并不能删除chr(0)的不可见字符,见如下测试。


但oracle中上述语句却可以成功执行,见参考博文3。


参考

[1]. SQL Server 不可见字符处理
[2]. 字符串中的不可见字符应该如何清除?
[3]. Oracle中varchar2字段的不可见字符处理

原文链接:https://www.f2er.com/postgresql/194322.html

猜你在找的Postgre SQL相关文章