现在工作中用到数据库是 postgre,postgre 难免出现这样的场景,就是对字符串进行分割,分割成数组进行操作,分割成行数据进行操作。这里简单介绍几个这两天学习到的方法,均是对字符串进行分割。
- regexp_split_to_array
这个方法可以将字符串分割成数组
regexp_split_to_array('被分割的字符串', '分割符')
例如
SELECT arr from regexp_split_to_array('a,b,c', ',') as arr
如果想单独获取分割后数组指定索引对应的字符串,这里的索引和 java 的数组索引不同,java 数组的索引是从 0 开始,而 postgre 的索引是从 1 开始,如果索引越界去获取,不会报错,但是会返回 null。
SELECT arr[1] from regexp_split_to_array('a,b,c', ',') as arr
SELECT arr[0] from regexp_split_to_array('a,b,c', ',') as arr
SELECT arr[10] from regexp_split_to_array('a,b,c', ',') as arr
- regexp_split_to_table
这个方法是将字符串分割成行数据,分割后可以对行数据进行 in 查询
regexp_split_to_table('被分割的字符串', '分割符')
例如:
select * from regexp_split_to_table('a,b,c' ,',')
in 查询
SELECT
*
FROM
某表
WHERE
某字段 IN ( SELECT * FROM regexp_split_to_table( 'a,b,c', ',' ) )
- split_part
这个方法分割字符串后获取指定位置的字符串
select split_part('被分割的字符串' ,'分隔符', 位置索引)
例如:
select split_part('a,b,c', ',', 2)
获取最后一个分割后的字符串
SELECT
split_part( 'a,b,c,d',
',',
LENGTH ( REPLACE ( 'a,b,c,d', ',', ',,' ) ) - LENGTH ( 'a,b,c,d' ) + 1 )
- array_length
这个方法可以获取分割后数组的长度
select array_length(string_to_array('被分割的字符串', '分隔符'),1)
例如:
select array_length(string_to_array('a,b,c,d',','),1)