Postgresql数据类型-字符类型

PostgreSQL支持的字符类型如表所示。

Postgresql数据类型-字符类型_第1张图片

character varying(n)存储的是变长字符类型,n是一个正整数,如果存储的字符串长度超出n则报错;如果存储的字符串长度比n小,character varying(n)仅存储字符串的实际位数。character(n)存储定长字符,如果存储的字符串长度超出n则报错;如果存储的字符串长度比n小,则用空白填充。为了验证此特性,下面做个实验,创建一张测试表,并插入一条测试数据,代码如下所示:

        mydb=> CREATE TABLE test_char(col1 varchar (4), col2 character(4));
        CREATE TABLE
        mydb=> INSERT INTO test_char(col1, col2) VALUES ('a', 'a');
        INSERT 0 1

表test_char的字段col1类型为character varying(4), col2类型为character(4),接下来计算两个字段值的字符串长度,代码如下所示:

        mydb=> SELECT char_length(col1), char_length(col2) FROM test_char ;
            char_length | char_length
        ----------------+-------------
                      1 |           1
        (1 row)

char_length(string)显示字符串字符数,从上面结果可以看出字符串长度都为1,接着查看两字段实际占用的物理空间大小,代码如下所示:

        mydb=> SELECT octet_length(col1), octet_length(col2) FROM test_char ;
            octet_length | octet_length
        -----------------+--------------
                        1 |             4
        (1 row)

octet_length(string)显示字符串占用的字节数,col2字段占用了4个字节,正好是col2字段定义的character长度。

值得一提的是character varying(n)类型如果不声明长度,将存储任意长度的字符串,而character(n)如果不声明长度则等效于character(1)。

text字符类型存储任意长度的字符串,和没有声明字符长度的character varying字符类型几乎没有差别。

提示:PostgreSQL支持最大的字段大小为1GB,虽然文档上说没有声明长度的character varying和text都支持任意长度的字符串,但仍受最大字段大小1GB的限制;此外,从性能上考虑这两种字符类型几乎没有差别,只是character(n)类型当存储的字符串长度不够时会用空白填充,这将带来存储空间一定程度的浪费,使用时需注意。

PostgreSQL支持丰富的字符函数,下面举例说明。计算字符串中的字符数,如下所示:

        mydb=> SELECT char_length('abcd');
          char_length
        -------------
                4
        (1 row)
        计算字符串占用的字节数,如下所示:
        mydb=> SELECT octet_length('abcd');
          octet_length
        --------------
                4
        (1 row)

指定字符在字符串的位置,如下所示:

        mydb=> SELECT position('a' in 'abcd');
          position
        ----------
                1
        (1 row)

提取字符串中的子串,如下所示:

        mydb=> SELECT substring('francs' from 3 for 4);
          substring
        -----------
          ancs
        (1 row)

拆分字符串,split_part函数语法如下:

        split_part(string text, delimiter text, field int)

根据delimiter分隔符拆分字符串string,并返回指定字段,字段从1开始,如下所示:

        mydb=> SELECT split_part('abc@def1@nb', '@',2);
          split_part
        ------------
          def1
        (1 row)

你可能感兴趣的:(数据处理,postgresql,数据库)