mysql 字符串‘|1|2|2|3|1|’中除去重复的数字,只保留一个,用正则表达式
时间: 2023-11-01 22:53:04 浏览: 64
MySQL 的正则表达式不支持查找和替换操作,但可以用 `REGEXP` 来匹配符合特定模式的字符串。
如果你想从字符串中只保留不重复的数字并且保留第一个出现的数字,则可以使用如下查询语句:
```
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(
'|1|2|2|3|1|',
'|',
numbers.n
),
'|',
-1
) AS `number`
FROM (
SELECT
@row := @row + 1 AS n
FROM
(SELECT @row := 0) r,
information_schema.columns
LIMIT
LENGTH('|1|2|2|3|1|') - LENGTH(REPLACE('|1|2|2|3|1|', '|', '')) + 1
) numbers
WHERE
`number` != ''
GROUP BY
`number`
```
这个查询语句会将字符串按照 `|` 分割成一个个的数字,然后通过 `GROUP BY` 来去除重复的数字,最后只保留第一个出现的数字。
上述查询语句的结果如下所示:
```
+--------+
| number |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
```
相关问题
mysql正则表达式 将字符串'1,2,3,4' 拆分为 '1','2','3','4'
你可以使用MySQL的内置函数REGEXP_REPLACE()和SUBSTRING_INDEX()来将字符串'1,2,3,4'拆分为'1'、'2'、'3'和'4'。
首先,使用REGEXP_REPLACE()函数将逗号替换为单引号和逗号之间的空格。这将在每个数字周围添加单引号,并为每个数字之间添加一个空格。然后,使用SUBSTRING_INDEX()函数将每个数字提取到单独的列中。
以下是实现这一操作的查询:
```
SELECT
SUBSTRING_INDEX(REGEXP_REPLACE('1,2,3,4', ',', "' , '"), ' ', 1) AS col1,
SUBSTRING_INDEX(SUBSTRING_INDEX(REGEXP_REPLACE('1,2,3,4', ',', "' , '"), ' ', 2), ' ', -1) AS col2,
SUBSTRING_INDEX(SUBSTRING_INDEX(REGEXP_REPLACE('1,2,3,4', ',', "' , '"), ' ', 3), ' ', -1) AS col3,
SUBSTRING_INDEX(SUBSTRING_INDEX(REGEXP_REPLACE('1,2,3,4', ',', "' , '"), ' ', 4), ' ', -1) AS col4;
```
这将返回以下结果:
```
+------+------+------+------+
| col1 | col2 | col3 | col4 |
+------+------+------+------+
| '1' | '2' | '3' | '4' |
+------+------+------+------+
```
这里的REGEXP_REPLACE()函数使用一个正则表达式,将逗号替换为单引号和逗号之间的空格。然后,每个SUBSTRING_INDEX()函数使用两个参数:字符串本身和空格。第三个参数指定要返回的子字符串的位置。
mysql根据正则表达式替换字符串的mysql函数
是什么?
MySQL中根据正则表达式替换字符串的函数为REGEXP_REPLACE。使用方法如下:
REGEXP_REPLACE(str,regexp,replace_str)
其中str是原字符串,regexp是要匹配的正则表达式,replace_str是替换后的字符串。例如,将字符串中的所有数字替换为"A",可以使用以下语句:
SELECT REGEXP_REPLACE('123abc456', '[0-9]+', 'A');
结果为"AabcA"。注意,MySQL需要使用正则表达式引擎开关才能使用正则表达式函数,可以使用以下语句开启:
SET GLOBAL pcre2_jit=ON;
这个设置只对当前会话有效,如果需要永久生效,需要修改配置文件(my.cnf)。