是否可以在mysql数据库行中分隔数据? 我有超过约200万条目的数据,因此导出到csv并手动执行此操作不起作用,因为数据库拒绝转储数据。
数据格式为
url.com?some=0
url2.com?some=14
是否可以删除?以及之后的数据呢?
答案 0 :(得分:4)
嗯,首先要做的事情。数据库的大小并不重要,MySQL 应转储到CSV而不会出现问题。我成功地转储了包含两倍于您正在处理的记录数量的表。当然,其中一部分假设RAM和磁盘空间不是问题,可能并非如此。
关于过滤数据的问题,是的,这是可能的。我将假设您的列名为“url”,我的示例如下所示,所以请记住更改它,如果它被命名为其他名称。
实质上,您可以运行如下查询:
UPDATE tablename SET url = SUBSTRING_INDEX(url, "?", 1);
这会将URL的所有值更改为仅在第一次出现问号之前包含文本。
答案 1 :(得分:1)
您可以使用locate
和substring
来删除这些字符串。例如:
mysql> select url, case when locate('?', url) = 0 then url else substring(url, 1, locate('?', url) - 1) end as truncated from urls;
+------------------+-----------+
| url | truncated |
+------------------+-----------+
| url.com?some=0 | url.com |
| url2.com?some=14 | url2.com |
| url3.com | url3.com |
+------------------+-----------+
所以这应该可以解决问题:
update your_table
set url = case when locate('?', url) = 0 then url else substring(url, 1, locate('?', url) - 1) end
另一个选项是substring_index
:
mysql> select url, substring_index(url, '?', 1) from urls;
+------------------+------------------------------+
| url | substring_index(url, '?', 1) |
+------------------+------------------------------+
| url3.com | url3.com |
| url.com?some=0 | url.com |
| url2.com?some=14 | url2.com |
+------------------+------------------------------+
所以这也应该有效:
update your_table
set url = substring_index(url, '?', 1)