标签 PostgreSQL , 全角 , 半角 , 转换 , ascii , chr , 编码 背景 转载原文 http://blog.qdac.cc/?p=1289 我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。
标签
PostgreSQL , 全角 , 半角 , 转换 , ascii , chr , 编码
背景
转载原文
我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。当然这个过程应尽量在前台完成,但如果针对已经存在的数据,下面提供的两个函数就比较方便了。
1、全角转换为半角函数
--© 2014,swish,原版首发:http://blog.qdac.cc/?p=1281,自由使用,保留版权
create or replace function CnFullToHalf(s character varying)
returns character varying
as
$$
declare
retval character varying;
c character varying;
l integer;
begin
l=length(s);
retval='';
while l>0 loop
c=left(s,1);
if c=' ' then -- 全角空格
retval=retval||' ';
elsif c>='!' and c<='~' then -- 全角!到~的范围
retval=retval || chr(ascii('!')+ascii(c)-ascii('!'));
else
retval=retval||c;
end if;
s=substring(s,2,l-1);
l=l-1;
end loop;
return retval;
end;
$$language plpgsql strict immutable;
2、半角转全角
--© 2014,swish,原版首发:http://blog.qdac.cc/?p=1281,自由使用,保留版权
create or replace function CnHalfToFull(s character varying)
returns character varying
as
$$
declare
retval character varying;
c integer;
l integer;
begin
l=length(s);
retval='';
while l>0 loop
c=ascii(left(s,1));
if c=32 then -- 空格
retval=retval||' ';
elsif c>=33 and c<=126 then
retval=retval || chr(ascii('!')+c-ascii('!'));
else
retval=retval||chr(c);
end if;
s=substring(s,2,l-1);
l=l-1;
end loop;
return retval;
end;
$$language plpgsql strict immutable;
适合UTF8字符集。
例子
test01=# select CnHalfToFull('123ab?-_.*&^%#@~+_=-:;/><|\\"y');
cnhalftofull
--------------------------------------------------------------
123ab?-_.*&^%#@~+_=-:;/><|\\"y
(1 row)
test01=# select CnFullToHalf('123ab?-_.*&^%#@~+_=-:;/><|\\"y');
cnfulltohalf
--------------------------------
123ab?-_.*&^%#@~+_=-:;/><|\\"y
(1 row)
python 全角半角转换
全角半角字符的unicode编码关系
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33126 (十六进制 0x21 0x7E)
空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)
除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 65248 = 全角)
所以可以直接通过用+-法来处理非空格数据,对空格单独处理。
用到的一些函数
chr()函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
unichr()跟它一样,只不过返回的是Unicode字符。
ord()函数是chr()函数或unichr()函数的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值。
PG全角半角转换函数
根据以上规则,可以写成全角半角转换函数
全角转半角
create or replace function full_to_half(text) returns text as
$$
select string_agg(col, '') from
( select
case when ascii(col) >= 65281 and ascii(col) <=65374 then chr(ascii(col)-65248)
when ascii(col) = 12288 then chr(32)
else col
end AS col
from (select regexp_split_to_table($1, '') as col) t
) tt;
$$ language sql strict immutable;
半角转全角
create or replace function half_to_full(text) returns text as
$$
select string_agg(col, '') from
( select
case when ascii(col) >= 33 and ascii(col) <=126 then chr(ascii(col)+65248)
when ascii(col) = 32 then chr(12288)
else col
end AS col
from (select regexp_split_to_table($1, '') as col) t
) tt;
$$ language sql strict immutable;
例子
test01=# select full_to_half('123ab?-_.*&^%#@~+_=-:;/><|\\"y!');
full_to_half
---------------------------------
123ab?-_.*&^%#@~+_=-:;/><|\\"y!
(1 row)
test01=# select half_to_full('123ab?-_.*&^%#@~+_=-:;/><|\\"y! 123ab?-_.*&^%#@~+_=-:;/><|\\"y!');
half_to_full
------------------------------------------------------------------------------------------------------------------------------------
123ab?-_.*&^%#@~+_=-:;/><|\\"y! 123ab?-_.*&^%#@~+_=-:;/><|\\"y!
(1 row)
参考
https://www.biaodianfu.com/python-convert-between-unicode-fullwidth-halfwidth-characters.html
相关推荐
对postgresql数据库中不规则的数据批量处理查询,有些是全角的,需要转换查询,匹配,可以使用这个方法postgres全角转半角函数.txt
标题中的“pb全角转半角”指的是在PowerBuilder(PB)环境中,将全角字符转换为半角字符的操作。在计算机编程和文本处理中,全角字符和半角字符是两种不同的字符表示方式。全角字符通常占两个字节,而半角字符占一个...
PostgreSQL是一款强大的开源关系型数据库管理系统(RDBMS),广泛应用于各个行业和领域,提供了丰富和灵活的数据类型和类型转换功能。在数据库操作中,根据实际应用需求,经常需要对数据进行类型转换。本文档详细...
mysql2postgresql, 转换mysql模式到 PostgreSQL mysql2postgresql转换mysql模式和数据到 PostgreSQL用法使用命令在xml格式中创建转储: mysqldump --xml -u USER_NAME DB_NAME> DUMP_FILE_NAME
### DB2到GreenPlum/PostgreSQL的转换指南 #### 1. 引言 ##### 1.1 目的 本指南旨在帮助用户理解从DB2迁移到GreenPlum或PostgreSQL过程中所涉及的关键技术和注意事项。由于这两种数据库系统之间存在显著差异,因此...
PostgreSQL中文学习手册 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (数据表 数据表 ) 4 一、表的定义: 一、表的定义: 一、表的定义: . 4 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册...
国外大牛写的一个mysql数据库转换postgresql的脚本。亲试可以无错误运行。
A Tour of PostgreSQL Internals.pdf Inside the PostgreSQL Query Optimizer.pdf Inside the PostgreSQL Shared Buffer Cache.pdf Internals Of PostgreSQL Wal.pdf PostgreSQL Internals Through Pictures.pdf ...
PostgreSQL(postgresql-14.1.tar.bz2) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。...
PostgreSQL(postgresql-14.1.tar.gz) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES...
PostgreSQL(postgresql-13.5.tar.bz2) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。...
### PostGreSQL在Centos 7.9上的安装与部署 #### 一、引言 在开始学习任何数据库之前,最重要的第一步就是安装部署一个可供学习和测试的环境。选择一个在业界广泛使用的操作系统版本,以及一个成熟稳定的数据库...
PostgreSQL(postgresql-13.5.tar.gz) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES...
**PostgreSQL 10 安装指南** PostgreSQL 是一款强大的开源关系型数据库管理系统,具有高度的稳定性和可扩展性,被广泛应用于各种规模的企业和项目。本文将详细介绍如何使用提供的 PostgreSQL-10 安装包进行安装,...
PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性和可靠性而受到全球开发者的广泛赞誉。在标题和描述中提到的“postgresql 12、15离线安装包”指的是为这两个版本提供的安装程序,适用于没有互联网...
Navicat for PostgreSQL是一套专为PostgreSQL设计的强大数据库管理及开发工具。它可以用于任何版本 7.5 或以上的 PostgreSQL 数据库服务器,并支持大部份 PostgreSQL最新版本的功能,包括触发器、函数、管理用户等。...
标题中提到的"postgresql-42.2.2.jar"和"postgresql-9.2-1003.jdbc4.jar"是与PostgreSQL相关的Java档案(JAR)文件,它们在Java应用程序中用于与PostgreSQL数据库进行交互。 首先,"postgresql-42.2.2.jar"是...
集成 PostgreSQL 的关键步骤是将 MySQL 数据库转换为 PostgreSQL 可以使用 Navicat 等工具将 MySQL 数据库转换为 PostgreSQL。在转换过程中,需要注意以下几点: * 将 MySQL 的 tinyint 类型转换为 PostgreSQL 的 ...
postgresql-42.5.0.jar是Java上的一个驱动程序,用于连接PostgreSQL数据库并与其进行交互。它可以让Java程序员方便地使用PostgreSQL数据库,并提供了许多功能和工具,使程序员可以编写高效、稳定和高性能的应用程序...