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;