字符串类型是最常用的几种数据类型之一,分为变长和定长等类型。
字符串类型介绍
类型名称 | 描述 |
---|---|
character varying(n) varchar(n) | 变长,最大为1GB。存储空间为:4+实际的字符串长度。 与MySQL中的varchar(n)或text(n),以及oracle中的varchar2(n)类似,但是在MySQL中varchar最多长64KB,oracle varchar2最多为4000字节,而PG中可以达到1GB |
character(n) char(n) | 定长,不足补空白,最大为1GB。存储空间为4+n |
text | 变长,无长度限制。与MySQL中的longtext相类似 |
- 未声明长度的character等价于character(1)
- 未声明长度的character varying,说明该类型接受任何长度的字符串。
- character的存储长度为4+n,n为定义时的长度(这些类型的存储长度是4字节加上实际的字符串长度)
- 允许存储的最大字符串大概是1GB
- 在PG中定长的char(n)与变长的varchar(n)没有差别,大多数情况下建议使用text或者varchar
字符串函数和操作符
常用标准SQL字符串函数和操作符
函数 | 返回类型 | 描述 | 示例 | 结果 |
---|---|---|---|---|
string || string | text | 字符串连接 | ‘Post’ || ‘greSQL’ | PostgreSQL |
lower(string) | text | 把字符串转化为小写 | lower(‘TOM’) | tom |
upper(string) | text | 把字符串转化为大写 | upper(‘tom’) | TOM |
position(substring in string) | int | 指定子字符串的位置 | position(‘om’ in ‘Thomas’) | 3 |
substring(string [from int][for int]) | text | 抽取子字符串 | substring(‘Thomas’ from 2 for 3) | hom |
substring(string from pattern) | text | 抽取匹配POSIX正则表达式的子字符串 | substring(‘Thomas’ from ‘…$’) | mas |
常用其他字符串函数
函数 | 返回类型 | 描述 | 示例 | 结果 |
---|---|---|---|---|
length(string) | int | string中字符的数目 | length(‘osdba’) | 5 |
lpad(string text,length int[,fill text]) | text | 通过填充字符fill(默认为空白),把string填充为length长度。如果string已经比length长,则将其尾部截断 | lpad(‘OK’,5,‘12’) | 121OK |
rpad(string text,length int[,fill text]) | text | 通过填充字符fill(默认为空白),把string填充为length长度。如果string已经比length长,则将其尾部截断 | rpad(‘os’,6,‘123’) | os1231 |
ltrim(string text[,characters text]) | text | 从字符串string的开头删除包含在参数characters中的字符,直到遇到一个不在characters中的字符为止,参数characters的默认值为空格 | ltrim(‘213osdba213’,‘123’) | osdba213 |
rtrim(string text[,characters text]) | text | 从字符串string的结尾删除包含在参数characters中的字符,直到遇到一个不在characters中的字符为止,参数characters的默认值为空格 | rtrim(‘trimxxxx’,‘x’) | trim |
replace(string text,from text,to text) | text | 把字符串string中出现的所有子字符串from替换成子字符串to | replace(‘123osdba45osdba78’) | 123-45-78 |
regexp_replace(string text,pattern text,replacement text[,flags text]) | text | 替换匹配POSIX正则表达式的子字符串 | regexp_replace(‘os123dba’,‘.[1-9]+’,‘#’) | o#dba |
split_part(string text,delimiter text,field int) | text | 根据delimiter分隔string返回生成的第field个子字符串(1为基) | split_part(‘123#456#789’,‘#’,2) | 456 |
substr(string,from[,count]) | text | 抽取子字符串。和substring(string from from for count)一样 | substr(‘osdba’,2,2) | sd |
translate(string text,from text,to text) | text | 把string中包含的所有匹配from的字符转化为对应的在to中的字符 | translate(‘12345’,‘14’,‘db’) | d23b5 |