PostgreSQL Oracle兼容性 - 计算字符长度与字节长度(char(?) 与varchar(?)空格如何计算长度)

标签

PostgreSQL , Oracle , 字符长度 , 字节长度 , 空格 , varchar , char , 定长 , 变长 , 末尾追加空格


背景

由于多字节字符的存在,所以在数据库应用中,通常会出现两种计算字符串长度的需求:

1、计算字符串个数

2、计算字节数

在不同的数据库中,使用的函数不一样。

如何计算字符和字节个数

https://stackoverflow.com/questions/17062065/how-to-select-data-items-of-a-certain-length

Assuming you want the length in characters, the function names vary with RDBMS;

MySQL: CHAR_LENGTH().
Oracle: LENGTH().
SQL Server: LEN().
PostgreSQL: CHAR_LENGTH() or LENGTH().
SQLite: LENGTH().

If you want the length in bytes, it's instead;

MySQL: LENGTH().
Oracle: LENGTHB().
SQL Server: DATALENGTH().
PostgreSQL: OCTET_LENGTH().

For example, selecting all rows with names longer than 10 characters in MySQL would be;

SELECT * FROM myTable WHERE CHAR_LENGTH(name) > 10;

变长和定长的区别,字符计算个数的区别

以PostgreSQL为例。

1、定长,末尾自动追加空格,计算字符长度时,不计算末尾的空格。计算字节长度时,计算空格。

postgres=# select octet_length('abc    '::char(1000));
 octet_length
--------------
         1000
(1 row)  

postgres=# select char_length('abc    '::char(1000));
 char_length
-------------
           3
(1 row)  

postgres=# select char_length('你好abc    '::char(1000));
 char_length
-------------
           5
(1 row)  

postgres=# select octet_length('你好abc    '::char(1000));
 octet_length
--------------
         1004
(1 row)

2、变长,末尾不追加空格,计算字符长度时,计算空格。计算字节长度时,计算空格。


postgres=# select char_length('abc    '::varchar(1000));
 char_length
-------------
           7
(1 row)  

postgres=# select octet_length('abc    '::varchar(1000));
 octet_length
--------------
            7
(1 row)  

postgres=# select octet_length('你好abc    '::varchar(1000));
 octet_length
--------------
           13
(1 row)  

postgres=# select char_length('你好abc    '::varchar(1000));
 char_length
-------------
           9
(1 row)  
时间: 2024-09-20 15:52:01

PostgreSQL Oracle兼容性 - 计算字符长度与字节长度(char(?) 与varchar(?)空格如何计算长度)的相关文章

PostgreSQL Oracle 兼容性之 - 字符编码转换 CONVERT

背景 参考https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm Oracle 中,可以将一个字符串从一个编码转换为另一个编码的输出. convert(string, 目标字符集, 源字符集) 例如 SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL; CONVERT('ÄÊÍÕØABCDE' -------

PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL , autonomous_transaction , 自治事务 , Oracle兼容性 , plpgsql 背景 PostgreSQL的plpgsql服务端编程语言与Oracle数据库的pl/sql编程语言非常类似,但是对于自治事务一直没有语法层面的支持. 以往如果要支持自治事务,可以使用exce

PostgreSQL Oracle 兼容性之 - rowid (CREATE TABLE WITH OIDS)

标签 PostgreSQL , Oracle , 兼容性 , 行号 , rowid , oid , ctid 背景 Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录. PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录. 但是PostgreSQL的引擎为多版本引擎,因此一条记录在被更新后CTID会发生变化(代表了新的版本). 不管是Oracle还

PostgreSQL Oracle兼容性 之 - parser SQL保留|关键字(keywrods)大全

标签 PostgreSQL , keywords , 关键字 , Oracle 兼容性 背景 PostgreSQL数据库中有哪些关键字,这些关键字的使用限制如何? https://www.postgresql.org/docs/10/static/sql-keywords-appendix.html 文档中的说明并不是特别清晰,(并且KEYWORDS与版本强相关),所以使用pg_get_keywords这个系统函数得到的,更加准确可读. https://www.postgresql.org/do

PostgreSQL Oracle 兼容性之 - timestamp 与 numeric 的运算

标签 PostgreSQL , Oracle , 兼容性 , timestamp , numeric 背景 Oracle里面支持时间戳与数字的加减,数字默认单位为天. PostgreSQL 支持时间戳与interval类型进行加减.日期支持与整型做加减. 为了兼容Oracle(时间戳与数字加减),我们可以复写操作符来实现时间戳与数字的加减. 复写操作符 1.自定义几个函数,用于时间戳与数字的加减. postgres=# create or replace function timestamp_a

PostgreSQL Oracle 兼容性 之 TABLE、PIPELINED函数

标签 PostgreSQL , 返回表 , 返回复合类型 , 返回游标 背景 Oracle 通过table, pipelined函数,用于格式化返回类型为table的函数的结果. Table function concepts There a couple of steps to take when you are working with table functions. Like when you are working with normal tables you have to desc

PostgreSQL Oracle 兼容性之 - 系统列(ctid, oid, cmin, cmax, xmin, xmax)

标签 PostgreSQL , Oracle , 兼容性 , ctid , cmin , cmax , xmin , xmax , oid 背景 PostgreSQL中有一些系统列(即行的头部信息的列),例如物理行号,COMMAND ID,事务号,以及OID. 当我们建表时,不能使用冲突的列名,否则会报错: postgres=# create table a(ctid int); 错误: 42701: 字段名 "ctid" 与系统字段名冲突 LOCATION: CheckAttribu

PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义

背景 Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑. PostgreSQL也有一门非常高级的内置SQL编程语言,plpgsql.与Oracle PL/SQL语法极其类似,但是还是有一些不一样的地方.(PS:除了plpgsql,PostgreSQL还支持C,java,python,perl等流行的语言作为数据库的函数编程语言) 本文是针对有Oracle用户遇到的一些函数语法与PostgreSQL不兼

PostgreSQL Oracle 兼容性之 - RATIO_TO_REPORT 分析函数

标签 PostgreSQL , Oracle , RATIO_TO_REPORT , 分析函数 背景 Oracle的分析函数RATIO_TO_REPORT()是用于计算当前值在分组内的占比的 RATIO_TO_REPORT is an analytic function. It computes the ratio of a value to the sum of a set of values. If expr evaluates to null, then the ratio-to-repo