[mysql]提取数据之间始终是不同长度的括号

标签: sql MySQL
发布时间: 2017/1/9 21:35:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我遇到了一个问题,我似乎无法找到任何地方正确的解决方案。我想从一个永远不会有相同的长度,但总是会在括号中的列中提取数据。我试过不同的 SUBSTR 和定位声明,不得要领。

表︰ FiguresLog

|UpdateDate|    |Description|
|2014-01-01|    |(10.0.600.1) Various descriptions follow|
|2014-01-02|    |(192.168.10.100) Various descriptions follow|

我需要能够提取 (创建新的表字段) 包含在括号中的 IP 地址,如上所述,他们总是将不同的长度。

解决方法 1:

你可以使用定位和 SUBSTR 的整件事。 由于如何 SUBSTR 需要位置和长度,数学获取有一点麻烦。 希望这个例子很清楚︰

SELECT 
  SUBSTR(text, ip_start, ip_len) AS ip_addr
FROM
(
  SELECT text,
    (LOCATE('(', text) + 1) AS ip_start,
    (LOCATE(')', text) - (LOCATE('(', text) + 1)) AS ip_len
  FROM test
) temp;

请注意, (LOCATE('(', text) + 1) 获取重复。 + 1是所以我们并没有包括在括号中的子字符串。
实际计算, ip_lenip_len = end_paren_pos - ip_start ,但我们不能创建并选择从 ip_start 在同一查询中。

在行动中的示例︰ http://sqlfiddle.com/# ! 2/2845e/3

官方微信
官方QQ群
31647020