更新MySQL(使用regexp?)

时间:2011-05-19 19:34:38

标签: mysql regex dns subdomain

我想将看似“someSubdomainInfo.mydomain.com”的值更新为“mydomain.com”(.com只是一个示例,我想抓住其他所有内容 - 基本上清理子域信息)< / p>

考虑使用^([az]。*。)?([a-zA-Z0-9 _-] 。[az] )作为RegExp(缺少以数字开头的域,可能是其他人)

关于如何编写相关更新声明的任何想法?

谢谢,

编辑:再次看我的问题,似乎我没有清楚地表达出来。 我希望在所有域中完成此操作,而不是在一个一个域中完成。 换句话说,我不知道“mydomain.com”是什么提前。

如果我导出到csv我可以使用这个正则表达式并用\ 2替换(在EditPro文本编辑器上验证),我正在寻找类似于直接在MySQL中使用圆顶的东西。

2 个答案:

答案 0 :(得分:0)

RegExp仍然是MySQL的主要产品。它们有利于匹配和比较,但不是替代。

我的建议是使用String Functions

SELECT url_column, SUBSTRING(url_column, INSTR(url_column, '.mydomain.com') + 1)) FROM your_table;

这将在列值中查找根域。如果找到它,它将只占用字符串的这一部分。否则,它将保留原始字符串。使用上面的SELECT语句对其进行测试,并在为模式调整后将其设为UPDATE

答案 1 :(得分:0)

SUBSTRING_INDEX()最适合提取部分网址。

如果你知道域名扩展,你可以聪明并防止意外更新。否则,您可以在子句中使用regex,或计算.的数量,以防止此更新更改您不想清除其子域的URL。

UPDATE test SET url = SUBSTRING_INDEX(url, '.', -2) WHERE SUBSTRING_INDEX(url, '.', -2) = 'mydomain.com';