【问题标题】:Update MySQL (using regexp?)更新 MySQL(使用正则表达式?)
【发布时间】:2011-08-29 04:00:56
【问题描述】:

我想将看起来像“someSubdomainInfo.mydomain.com”的值更新为“mydomain.com”(.com 只是一个示例,我想捕获其他所有内容 - 基本上清理子域信息)

考虑使用 ^([az].*.)?([a-zA-Z0-9_-].[az]) 作为正则表达式(缺少以数字开头的域,可能还有其他人)

关于如何编写相关更新声明有什么想法吗?

谢谢,

编辑:再次查看我的问题,似乎我没有清楚地提出它。 我希望对所有域都这样做,而不是在一个一个域上。 换句话说,我提前不知道“mydomain.com”是什么。

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

【问题讨论】:

    标签: mysql regex dns subdomain


    【解决方案1】:

    SUBSTRING_INDEX() 最适合提取部分 URL。

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

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

    【讨论】:

      【解决方案2】:

      RegExp 在 MySQL 中仍然是原始的。它们很适合匹配和比较,但没有那么多替代品。

      我的建议是使用String Functions

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 2012-06-24
        • 1970-01-01
        相关资源
        最近更新 更多