在mysql中怎么改写语法实现regexp_split_to_array功能
时间: 2023-06-01 12:06:28 浏览: 215
可以使用MySQL的正则表达式函数REGEXP_REPLACE和SUBSTRING_INDEX函数来实现类似于regexp_split_to_array()的功能。以下是一个示例:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(
REGEXP_REPLACE('abc,def,ghi', ',', '|'),
'|', n), '|', -1
) AS split_value
FROM
(SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3) AS nums;
输出结果为:
split_value
-----------
abc
def
ghi
其中,REGEXP_REPLACE函数将逗号替换为竖线,然后使用SUBSTRING_INDEX函数将竖线分隔的值提取出来。可以通过添加更多的UNION ALL子句来处理更多的值。
相关问题
mysql8 实现regexp_split_to_table函数
MySQL 8.0 引入了新的 `REGEXP_SPLIT_TO_TABLE()` 函数,可以方便地将字符串按照正则表达式分隔成多行数据。
下面是一个示例:
```sql
SELECT * FROM REGEXP_SPLIT_TO_TABLE('1,2,3,4,5', ',');
```
输出结果如下:
```
+----+
| |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+
```
可以看到,字符串 `'1,2,3,4,5'` 已经按逗号分隔成了多行数据。
`REGEXP_SPLIT_TO_TABLE()` 函数的语法如下:
```sql
REGEXP_SPLIT_TO_TABLE(str, regexp)
```
其中,`str` 是要分隔的字符串,`regexp` 是用于分隔的正则表达式。函数返回一个包含分隔结果的表格。
需要注意的是,`REGEXP_SPLIT_TO_TABLE()` 函数只能在 MySQL 8.0 及以上版本中使用,如果使用的是早期版本,则需要使用自定义函数来实现。
mysql实现regexp_split_to_table函数
MySQL中没有内置的regexp_split_to_table函数,但可以通过自定义函数来实现此功能。
以下是一个实现regexp_split_to_table函数的MySQL自定义函数:
```sql
DELIMITER $$
CREATE FUNCTION regexp_split_to_table(str VARCHAR(255), delim VARCHAR(12))
RETURNS TABLE
BEGIN
DECLARE cur_position INT DEFAULT 1;
DECLARE next_position INT;
DECLARE output_value VARCHAR(255);
DECLARE pattern VARCHAR(255);
SET pattern = CONCAT('[', delim, ']');
SET next_position = REGEXP_INSTR(str, pattern, cur_position);
WHILE next_position > 0 DO
SET output_value = SUBSTR(str, cur_position, next_position - cur_position);
SET cur_position = next_position + 1;
SET next_position = REGEXP_INSTR(str, pattern, cur_position);
IF output_value != '' THEN
INSERT INTO RESULTSET VALUES (output_value);
END IF;
END WHILE;
SET output_value = SUBSTR(str, cur_position);
IF output_value != '' THEN
INSERT INTO RESULTSET VALUES (output_value);
END IF;
RETURN;
END$$
DELIMITER ;
```
使用示例:
```sql
SELECT * FROM regexp_split_to_table('apple,banana,orange', ',');
```
输出:
```
+--------+
| output |
+--------+
| apple |
| banana |
| orange |
+--------+
```
阅读全文