📜  sql 拆分字符串函数 - SQL (1)

📅  最后修改于: 2023-12-03 15:20:16.982000             🧑  作者: Mango

SQL拆分字符串函数

SQL拆分字符串函数是用于将一个长字符串按照指定分隔符进行拆分的函数。在很多实际场景中,需要对数据库中的字符串进行一些灵活的操作,如查询、排序、统计等,因此需要使用拆分函数。

下面介绍几种SQL拆分字符串函数的常见实现方式。

1. SUBSTRING_INDEX
SELECT SUBSTRING_INDEX('hello,world', ',', 1) AS part1,
       SUBSTRING_INDEX('hello,world', ',', -1) AS part2;

输出:

| part1 | part2 | |-------|--------| | hello | world |

函数的参数依次为原字符串、分隔符和拆分的序号。当序号为正数时,从字符串的左边开始数;当序号为负数时,从字符串的右边开始数。

2. REGEXP_SUBSTR
SELECT REGEXP_SUBSTR('hello,world', '[^,]+', 1, 1) AS part1,
       REGEXP_SUBSTR('hello,world', '[^,]+', 1, 2) AS part2;

输出:

| part1 | part2 | |-------|--------| | hello | world |

函数的参数依次为原字符串、正则表达式、开始位置和拆分的序号。

3. STRING_SPLIT
SELECT value
FROM STRING_SPLIT('hello,world', ',');

输出:

| value | |-------| | hello | | world |

该函数是SQL Server 2016引入的,在MySQL和Oracle中暂无该函数。

4. 自定义函数

以下是一个MySQL中自定义的拆分函数示例:

DELIMITER //
CREATE FUNCTION split_str(str VARCHAR(255), delimiter VARCHAR(10), pos INT)
RETURNS VARCHAR(255)
BEGIN
    RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(str, delimiter, pos), delimiter, -1);
END//
DELIMITER ;

调用示例:

SELECT split_str('hello,world', ',', 1) AS part1,
       split_str('hello,world', ',', 2) AS part2;

输出:

| part1 | part2 | |-------|--------| | hello | world |

以上所有示例均以MySQL为例,实现方式可能因不同数据库而有所不同。需要注意的是,拆分函数属于字符串操作,可能存在性能问题,应根据实际情况谨慎使用。