VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

SUBSTRING_INDEX

功能描述

Vastbase G100支持使用substring_index()函数按照指定的分隔符划分字符串,返回以分隔符分割的原字符串中对应索引位的子字符串。

语法格式

substring_index(str,delim,index)

参数说明

  • str

    需要操作的原字符串。

  • delim

    分隔符。

  • index

    索引位,匹配 delim 出现的次数。取值可正数可负数:

    • index为正数,返回以delim分割之后index对应位置的左边子字符串。
    • index为负数,返回以delim分割之后index对应位置的右边子字符串。

注意事项

该功能仅在Vastbase G100 V2.2 Build 10(Patch No.9)及以后版本支持。

示例

示例1:使用SELECT语句查看substring_index()的字符串分割结果。

SELECT substring_index('中文,测试,test,%',',',3);
SELECT substring_index('中文,测试,test,%',',',1);
SELECT substring_index('中文,测试,test,%',',',-1);

返回结果为:

 substring_index
------------------
 中文,测试,test
(1 row)

 substring_index
-----------------
 中文
(1 row)

 substring_index
-----------------
 %
(1 row)

示例2:对表进行DML操作时调用substring_index()函数。

1、创建测试表t_substring_index。

CREATE TABLE t_substring_index(c1 int,c2 varchar(20),c3 json,c4 timestamptz);

2、向分区表中插入测试数据。

INSERT INTO t_substring_index VALUES(1,'192.166.2.203','{"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}}','2022-02-02 10:10:10+08');
INSERT INTO t_substring_index VALUES(2,'192.167.2.203','{"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}}','2022-01-02 10:10:10+08');
INSERT INTO t_substring_index VALUES(3,'192.168.2.203','{"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}}','2021-02-02 10:10:10+08');

3、执行INSERT语句。

INSERT INTO t_substring_index SELECT * FROM t_substring_index WHERE substring_index(substring_index(c2,'.',2),'.',-1)=166;

4、执行UPDATE语句。

UPDATE t_substring_index SET c4=NULL WHERE substring_index(c4,'-',1)=2021;

5、执行DELETE语句。

DELETE FROM t_substring_index WHERE substring_index(substring_index(c2,'.',2),'.',-1)=167;

6、以上DML语句成功执行后,查看执行结果。

SELECT * FROM t_substring_index;

返回结果为:

 c1 |      c2       |                                                                                                              c3
                                                                   |           c4
----+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------+------------------------
  1 | 192.166.2.203 | {"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}
},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}} | 2022-02-02 10:10:10+08
  1 | 192.166.2.203 | {"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}
},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}} | 2022-02-02 10:10:10+08
  3 | 192.168.2.203 | {"一年级":{"一班":{"张三":{"学号":1,"年龄":19,"家乡":"河北"},"李四":{"学号":2,"年龄":20,"家乡":"广东"}},"二班":{"王五":{"学号":1,"年龄":19,"家乡":"湖南"}}
},"二年级":{"一班":{"赵六":{"学号":1,"年龄":21,"家乡":"内蒙古"}}}} |
(3 rows)

清理环境

DROP TABLE t_substring_index;