我在MySQL表中有数千个字符串,如
some-text-for-read/id123456
some-other-text-to-read-too/id456789
我想制作它们
/id123456
/id456789
如何使用通配符作为文本部分? 我尝试了我发现的一切 “REPLACE%id%” 一种查询,但没有任何效果,因为我可能没有做到这一点。
答案 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))