SPLIT_PART
使用分隔符拆分字符串,并返回指定字段开头位置的字符串(从 1 开始计数)。
行为类型
不可变语法
SPLIT_PART ( string , delimiter , field )
参数
string
- 实参字符串
delimiter
- 分隔符
field
- (INTEGER) 要返回的部分的编号
注意
将其用于子字段的字符形式。
示例
指定整数 2 返回第二个字符串或 def
。
=> SELECT SPLIT_PART('abc~@~def~@~ghi', '~@~', 2);
SPLIT_PART
------------
def
(1 row)
在下一个示例中,指定 3,返回第三个字符串或 789
。
=> SELECT SPLIT_PART('123~|~456~|~789', '~|~', 3);
SPLIT_PART
------------
789
(1 row)
波形符仅用于可读性。如果省略,则返回相同结果:
=> SELECT SPLIT_PART('123|456|789', '|', 3);
SPLIT_PART
------------
789
(1 row)
看看如果指定超出字符串数目的整数,会发生什么:结果不是 NULL,而是空字符串。
=> SELECT SPLIT_PART('123|456|789', '|', 4);
SPLIT_PART
------------
(1 row)
=> SELECT SPLIT_PART('123|456|789', '|', 4) IS NULL;
?column?
----------
f
(1 row)
如果 SPLIT_PART 返回 NULL,则 LENGTH 也应返回 0。
=> SELECT LENGTH (SPLIT_PART('123|456|789', '|', 4));
LENGTH
--------
0
(1 row)
如果数据库的区域设置为 BINARY,则 SPLIT_PART 调用 SPLIT_PARTB:
=> SHOW LOCALE;
name | setting
--------+--------------------------------------
locale | en_US@collation=binary (LEN_KBINARY)
(1 row)
=> SELECT SPLIT_PART('123456789', '5', 1);
split_partb
-------------
1234
(1 row)
=> SET LOCALE TO 'en_US@collation=standard';
INFO 2567: Canonical locale: 'en_US@collation=standard'
Standard collation: 'LEN'
English (United States, collation=standard)
SET
=> SELECT SPLIT_PART('123456789', '5', 1);
split_part
------------
1234
(1 row)