欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL去掉表中所有不可見(jiàn)字符的操作

 更新時(shí)間:2020年12月29日 15:17:01   作者:asin929  
這篇文章主要介紹了PostgreSQL去掉表中所有不可見(jiàn)字符的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

問(wèn)題描述

數(shù)據(jù)庫(kù)中的某些數(shù)據(jù)中包含了某些不可見(jiàn)字符。ASCII碼中的0-31,127屬于控制字符,不可見(jiàn)。

這些不可見(jiàn)字符往往是不需要的,我們要想辦法刪除它。

解決辦法

寫(xiě)一函數(shù),將所有字段中的不可見(jiàn)字符替換為空格。

測(cè)試流程

環(huán)境準(zhǔn)備

建表,并插入帶不可見(jiàn)字符的記錄。注:下列數(shù)據(jù)中的不可見(jiàn)字符在粘貼過(guò)來(lái)的時(shí)候自動(dòng)去掉了,請(qǐng)按ALT+數(shù)字鍵加入。

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測(cè)試','測(cè)試' );
INSERT INTO ry_syrk_copy VALUES ('李華', '測(cè)試xx','世xx界' );

注:因不可見(jiàn)字符無(wú)法在CSDN中無(wú)法打出,故用xx代替。實(shí)際上在其它地方可以用ALT+數(shù)字鍵打印出來(lái)。

去掉表中所有的不可見(jiàn)字符

-- 函數(shù)說(shuō)明:將表test_table中所有的不可見(jiàn)字符替換掉
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 --替換所有的不可見(jiàn)字符為空格(除了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;

執(zhí)行函數(shù)

執(zhí)行函數(shù)–select * from delete_special_char(),之后查看表數(shù)據(jù),所有的不可見(jiàn)字符都被替換為空格。

補(bǔ)充–如何刪除chr(0)

值得注意的是上述函數(shù)并不能刪除chr(0)的不可見(jiàn)字符,見(jiàn)如下測(cè)試。

但oracle中上述語(yǔ)句卻可以成功執(zhí)行,下面我就來(lái)講一講吧~

Oracle中varchar2字段的不可見(jiàn)字符處理

在以前的項(xiàng)目中,曾經(jīng)出現(xiàn)加密后的字符串?dāng)?shù)據(jù)丟失,加密內(nèi)容無(wú)法正常解密的情況,經(jīng)查找原因,發(fā)現(xiàn)是數(shù)據(jù)庫(kù)表的varchar2字段中有chr(0)的不可見(jiàn)字符(即我們通常所說(shuō)的\0),當(dāng)出現(xiàn)這種情況時(shí),由于java和c++中對(duì)字符串處理的不同,將會(huì)導(dǎo)致所取得的字符串長(zhǎng)度不同。

在java中,字符串的長(zhǎng)度可以通過(guò)取字符串的字節(jié)數(shù)組來(lái)獲得,這樣得到的字符串長(zhǎng)度為字符串實(shí)際的大?。h字2個(gè)字節(jié),其他1個(gè)字節(jié));在c++中通過(guò)strlen函數(shù)獲得的字符串長(zhǎng)度為第一個(gè)字節(jié)\0之前的字符長(zhǎng)度。

當(dāng)我們?cè)诰帉?xiě)jni的時(shí)候,經(jīng)常會(huì)遇到將java的字符串轉(zhuǎn)換為c++中的字符串的情況,這樣,當(dāng)java中的字符串包含\0的空字節(jié)時(shí),在對(duì)c++轉(zhuǎn)換后的字符串求取長(zhǎng)度時(shí),不要使用strlen函數(shù),否則,其僅僅對(duì)\0字節(jié)之前的內(nèi)容求取長(zhǎng)度,與實(shí)際大小不同。

解決該類問(wèn)題,根據(jù)所屬應(yīng)用的不同,可通過(guò)三種手段解決:

在數(shù)據(jù)庫(kù)層解決:

Oracle數(shù)據(jù)庫(kù)中,可在查詢語(yǔ)句中使用函數(shù)replace來(lái)去除字符串中的非可見(jiàn)字符,例如:

select replace(content,chr(0),null) from bossquery_request where sky_command = '02';

以后大家如果遇到類似情況,可通過(guò)replace(字段名,chr(ASCII碼值),null)來(lái)去掉其中對(duì)應(yīng)的ASCII碼值的字符。

在java程序中解決:

在java程序中,大家可通過(guò)獲取String對(duì)象的所有字節(jié)內(nèi)容,對(duì)字節(jié)內(nèi)容進(jìn)行掃描,來(lái)去掉其中不需要的字節(jié)。

在JNI層解決:

在JNI層解決該問(wèn)題的方式是,不要使用strlen函數(shù)來(lái)獲取字符串長(zhǎng)度,可通過(guò)GetArrayLength取字節(jié)數(shù)組長(zhǎng)度函數(shù)或者其他類似函數(shù)來(lái)獲取字符串長(zhǎng)度,則可避免該情況發(fā)生。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 一文詳解PostgreSQL如何使用UUID

    一文詳解PostgreSQL如何使用UUID

    本文給大家介紹了PostgreSQL如何使用UUID,離線安裝時(shí),一般有四個(gè)包,都安裝的話,只需要開(kāi)啟uuid的使用即可,如果工具包(即 postgresql11-contrib)沒(méi)有安裝的話,需要單獨(dú)安裝一次,再進(jìn)行開(kāi)啟,需要的朋友可以參考下
    2024-02-02
  • PostgreSQL樹(shù)形結(jié)構(gòu)的遞歸查詢示例

    PostgreSQL樹(shù)形結(jié)構(gòu)的遞歸查詢示例

    這篇文章主要給大家介紹了關(guān)于PostgreSQL樹(shù)形結(jié)構(gòu)的遞歸查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Linux CentOS 7安裝PostgreSQL9.3圖文教程

    Linux CentOS 7安裝PostgreSQL9.3圖文教程

    這篇文章主要為大家詳細(xì)介紹了Linux CentOS 7安裝PostgresSQL9.3圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • PostgreSQL:string_agg?多列值聚合成一列的操作示例

    PostgreSQL:string_agg?多列值聚合成一列的操作示例

    PostgreSQL中的STRING_AGG()函數(shù)是一個(gè)聚合函數(shù),用于連接字符串列表并在字符串之間放置分隔符,這篇文章主要介紹了PostgreSQL:string_agg多列值聚合成一列,需要的朋友可以參考下
    2023-08-08
  • postgresql 中position函數(shù)的性能詳解

    postgresql 中position函數(shù)的性能詳解

    這篇文章主要介紹了postgresql 中position函數(shù)的性能詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Windows版?PostgreSQL?利用?pg_upgrade?進(jìn)行大版升級(jí)操作方法

    Windows版?PostgreSQL?利用?pg_upgrade?進(jìn)行大版升級(jí)操作方法

    最近?PostgreSQL?15?版本正式發(fā)布了,新版本的各種特性和好處本文就不展開(kāi)介紹了,主要介紹一下?Windows?環(huán)境下?PostgreSQL?大版本升級(jí)的方法,我們現(xiàn)在的幾個(gè)數(shù)據(jù)庫(kù)都是運(yùn)行在?Windows服務(wù)器的?PostgreSQL?14,需要的朋友可以參考下
    2022-10-10
  • postgresql 實(shí)現(xiàn)sql多行語(yǔ)句合并一行

    postgresql 實(shí)現(xiàn)sql多行語(yǔ)句合并一行

    這篇文章主要介紹了postgresql 實(shí)現(xiàn)sql多行語(yǔ)句合并一行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • PostgreSQL 定義返回表函數(shù)的操作

    PostgreSQL 定義返回表函數(shù)的操作

    這篇文章主要介紹了PostgreSQL 定義返回表函數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • postgresql~*符號(hào)的含義及用法說(shuō)明

    postgresql~*符號(hào)的含義及用法說(shuō)明

    這篇文章主要介紹了postgresql~*符號(hào)的含義及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作

    PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作

    這篇文章主要介紹了PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論