Postgresql学习笔记之——数据类型之字符串类型
一、Postgresql数据库字符串类型
类型 | 描述 |
---|---|
character varying(n) 或 varchar(n) | 变长字符串类型,最大空间1GB,存储空间4+实际的字符串长度。与MySQL中的varchar(n)或text(n),以及Oracle中的varchar2(n)类似,但是在MySQL中varchar最多只有64KB,Oracle中的varchar2最多只有4000字节。 |
character(n)或char(n) | 定长字符串类型,不足空白补充。最大1GB,存储空间4+n |
text | 变长字符串类型。无长度限制,与MySQL中的LONGTEXT类似 |
varchar(n) 在没有指定 n 的值时,表示可以接受1GB内的任何长度的字符串,建议加上 n
char(n) 在没有指定 n 值时,表示 char(1) ,
不管varchar还是char类型最小存储空间时4字节。而在Postgresql数据库中varchar和char指定长度过长时,实际在字段中存储的可能只是一个指针,具体内容会存储在toast表中,指针便于对字段值的快速访问。
在一些其他种类的数据库中定长的char有一定的优势。但是在postgresql中没有什么差别。大多数还是会用varchar或text。
二、字符串函数和操作符
支持标准的SQL字符串的函数和操作符:
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|---|---|---|---|
string ll string | text | 字符串链接 | selec ‘abc’ ll ‘EFG’; | ‘abcEFG’ |
length(string) | int | string 中字符的个数,主要区分的是中文和英文不同 | select length(‘abc’) | 3 |
bit_length(string) | int | 字符串二进制位长度(个数) | select bit_length(‘jack’); | 32 |
char_length(string)或character_length(string) | int | 字符串中字符的个数 | select char_length(‘jack’); | 4 |
octet_length(string) | int | 字符串中的字节数 | select octet_length(‘jack’); | 4 |
convert(string using conversion_name) | test | 使用指定的转换名字改变编码。转换可以通过CREATE CONVERSION定义,系统中也有一些预定义的转换名字 | select convert(‘Postgresql’ using iso_8859_1_to_utf8); | UTF8编码的Postgresql |
convert( string text, [ src_encoding name, ], dest_encoding name ) | text | 把字符串原来编码位 src_encoding 转成 dest_encoding 编码。如果没有指定src_encoding,则src_encoding为数据库编码 | select convert( ‘abc’, ‘UTF8’, ‘GBK’ ) | 以GBK编码的abc |
lower(string) | text | 把所有的字符串转成小写 | select lower(‘TOM’); | tom |
upper(string) | text | 把所有字符串转成大写 | select upper(‘tom’); | TOM |
initcap(string) | text | 将字符串中每个单词的第一个字符转为大写,其他变为小写(字符串中区分单词:非字符数字分割) | initcap(‘hi jack’) | Hi Jack |
overlay(string placing string from int[for int]) | text | 指定子字符串替换的范围,例子里时用 hom 字符串替换 Txxxxas 中从第2个字符开始的4个字符,如果没有指定 for int ,int 是子字符串的长度 | select overlay(‘Txxxxas’ placing ‘hom’ from 2 for 4); | Thomas |
position( substring in string ) | int | 查找substring 在 string 中的起始位置 | select position( ‘om’ in ‘Thomas’); | 3 |
strpos(string , substring) | int | 查找指定的子字符串substring在string中的起始位置 | select strpos(‘helloworld’ ,‘llo’); | 3 |
substring(string, from [, count] ) | text | 截取string中指定位置from的指定长度count的子字符串 | select substring ( ‘jack’ , 2, 2) | ac |
substring(string from int for int ) | text | 抽取指定位置(from int )开始指定个数(for int)的字符串,如果没有指定 for int 则从指定位置一直到结束全部截取 | select substring( ’ Thomas’ from 2 for 3 ); | hom |
substring(string from pattern) | text | 截取匹配posix正则表达式的字符串 | select substring(‘hello world’ from ‘…$’); | rld |
substring(string from pattern for escape) | text | 截取匹配posix正则表达式的字符串,for为转移字符 | select substring(‘Thomas’ from ‘%#“o_a#”_’ for ‘#’); | oma |
replace(string text, from text, to text ) | text | 把字符串string中所有出现的from 都替换成 to | select replace(‘abcddggdd’,‘d’,‘5’) | abc55gg55 |
ascii(string) | int | 字符串中第一个字符的ASCII码 | select ascii(‘abc’) | 97 |
chr(int) | text | 给出ASCII码所对应的字符 | select chr(97) | a |
decode(string text, type text ) | bytea | 把早先用encode编码的string里面的二进制数据解码,支持类型:base64、hex、escape | ||
encode(data bytea, type text) | text | 把二进制数据编码位只包含ASCII形式的数据,支持类型与decode类似 | ||
lpad(string text, length int [, fill text] ) | text | 通过在指定的string左边填充字符 fill (不指定默认空白),把string填充为指定的length长度,如果string长度比指定的length长,则将其尾部截断,例子里是将字符串 OK 左边使用 1 填充直到长度为5 | select lpad( ‘OK’, ‘5’, ‘1’) | 111OK |
rpad(string text, length int [, fill text] ) | text | 通过在指定的string右边填充字符 fill (不指定默认空白),把string填充为指定的length长度,如果string长度比指定的length长,则将其尾部截断,例子里是将字符串 OK 右边使用 1 填充直到长度为5 | select rpad( ‘OK’, ‘5’, ‘1’) | OK111 |
btrim( string text [ , character text ] ) | text | 从string的开头和结尾删除含有 character 中的字符,不指定character默认空格 | select btrim( ‘aajackaaaa’, ‘aa’ ) | jack |
ltrim( string text [ , character text ] ) | text | 从string的开头(左边)删除含有 character 中的字符,不指定character默认空格 | select btrim( ‘aajackaaaa’, ‘aa’ ) | jackaaaa |
rtrim( string text [ , character text ] ) | text | 从string的结尾(右边)删除含有 character 中的字符,不指定character默认空格 | select btrim( ‘aajackaaaa’, ‘aa’ ) | aajack |
quote_ident(string) | text | 返回适用于SQL语句的标识符形式(使用适当的引号进行界定),只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符),嵌入的引号会被恰当的写双份 | ||
quote_literal(string) | text | 返回适用于在SQL语句里当作文本的形式,嵌入的引号和反斜杠被恰当的写双份 | ||
pg_client_encoding() | name | 当前客户端编码名称 | select pg_client_encoding(); | UTF8 |
repeat(string text, number int ) | text | 将string重复number次 | select repeat( ‘abc’, 2); | abcabc |
split_part(string text, delimiter text, field int) | text | 根据delimiter分隔string,返回生成第 field 个字符串 | split_part( ‘123#456#789’, ‘#’, 2 ) | 456 |
regexp_replace(string text, pattern text, replacement text [ , flages text ]) | text | 替换匹配POSIX正则表达式的子字符串 |
三、特别注释
字符串length类似函数用法:
postgres=# select length('abcd');length
--------4
(1 row)postgres=# select octet_length('abcd');octet_length
--------------4
(1 row)postgres=# select bit_length('abcd');bit_length
------------32
(1 row)postgres=# select length('测试');length
--------2
(1 row)postgres=# select octet_length('测试');octet_length
--------------6
(1 row)postgres=# select bit_length('测试');bit_length
------------48
(1 row)
Postgresql学习笔记之——数据类型之字符串类型相关推荐
- Python学习笔记简单数据类型之字符串
1.字符串: (1).字符串就是一系列字符,串起来形成的一种简单数据类型.在Python中,用引号括起来的都是字符串,包括单引号,双引号,其中字符串可以灵活的运用起来,字符串中可以包括引号和撇号,示例 ...
- Swift学习笔记_数据类型_整数类型
1 整数类型 整数就是没有小数部分的数字. 整数类型分为两种: (1)有符号整数类型:表示负整数.零.和正整数 (2)无符号整数类型:表示零.和正整数 有符号整数类型有5种表示方式: (1)Int8: ...
- Postgresql学习笔记-高级语法篇
Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...
- PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL
目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...
- 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)
Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...
- pythonsze_python学习笔记二 数据类型(基础篇)
Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...
- 《流畅的python》学习笔记之python是什么类型的语言?
讨论类型时,最好考虑两条不同的坐标线! 强类型和弱类型 如果一门语言很少隐式转换类型,说明它是强类型语言.如果经常这么做,说明它是弱类型语言.其中,java,c++和python是强类型语言,php, ...
- 数据类型之字符串类型
数据类型之字符串类型 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.创建字符串很简单,只要为变量分配一个值即可.例如: str1 = 'Hello Wo ...
- WinDbg学习笔记(二)--字符串访问断点
标 题: [原创]WinDbg学习笔记(二)--字符串访问断点 作 者: gaorqing 时 间: 2009-07-25,21:39:04 链 接: http://bbs.pediy.com/sho ...
最新文章
- Javascript中undefined,NaN等特殊比较
- python魔法方法和普通方法_Python龙珠训练营九:魔法方法
- es6 Promise
- python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单
- computed 与methods , watched 的区别
- Scala可变数组和不可变数组之间相互转换
- Android Http请求框架二:xUtils 框架网络请求
- 可行的DeltaSpike教程
- python sns绘制回归线_Python数分实战:员工流失情况预测
- phpmyadmin在centos 7中安装
- 深入探讨SDN拓扑发现机制:新的攻击及实践对策【SDN拓扑】(上)
- java语言就业方向_2019年汉语言专业最全就业方向
- https 方式使用git@osc设置密码的方式
- 自动运维化tools篇2:通过SSH信任关系,批量修改LINUX密码
- PowerDesigner的基本使用
- OpenPDF 或 itext5 根据pdf模板生成多页PDF
- 超简单的HIDPI设置
- 查看linux主机防火墙列表,linux防火墙状态查看的方法实例
- 谷歌邮箱lmap服务器填什么_Gmail IMAP的应用技巧
- 高中数学,解析几何高考压轴题解题技巧