如何使用通配符删除/替换mysql中的部分字符串?

时间:2015-01-29 01:35:10

标签: mysql

我在MySQL表中有数千个字符串,如

some-text-for-read/id123456
some-other-text-to-read-too/id456789

我想制作它们

/id123456
/id456789

如何使用通配符作为文本部分? 我尝试了我发现的一切 “REPLACE%id%” 一种查询,但没有任何效果,因为我可能没有做到这一点。

2 个答案:

答案 0 :(得分:4)

使用MySQL string functions LOCATE()SUBSTR()的组合,您可以使用LOCATE()查找第一个/字符的字符串中的位置,以及SUBSTR()返回以开头的子字符串在原始字符串中的位置。

您可以将所有内容放入UPDATE语句中:

UPDATE your_table
SET your_column = SUBSTR(your_column, LOCATE('/', your_column))
-- Only on rows where the / is present, if there are non-matching rows
-- LOCATE() returns 0 when the string isn't found
WHERE LOCATE('/', your_column) > 0

示例:

> SELECT SUBSTR('some-other-text-to-read-too/id456789', LOCATE('/', 'some-other-text-to-read-too/id456789')) AS val;
+-----------+
| val       |
+-----------+
| /id456789 |
+-----------+

您需要WHERE子句的原因 - 如果行中没有/,则所有内容都将被删除:

/* This has no '/' */
> SELECT SUBSTR('some-other-text-to-read-tooid456789', LOCATE('/', 'some-other-text-to-read-tooid456789')) AS val;
+-----+
| val |
+-----+
|     |
+-----+

答案 1 :(得分:1)

试试这个:

UPDATE your_table set your_field = CONCAT('/', SUBSTRING_INDEX(your_field, '/', -1))