mysql - mysql 查询中的分隔行

标签 mysql substring

我有一个 mysql 数据库,其中一个字段中保存了多个 URL(见下文)。我现在需要分离这些 URL,将它们插入到新数据库中,其中每个 URL 都有自己的 ID/行。

不幸的是,到目前为止我只能使用 Substring 将第一个 URL 与其他 URL 分开,并且无法获取以下 URL。

这是此类字段的示例:

www.1234.com
www.435346.com
www.35345567.org
www.9380.net
...etc.

因此该字段中可以有不同数量的 URL。

我可以通过以下方式获得第一个:

INSERT INTO url (url)
SELECT DISTINCT SUBSTRING_INDEX(old_url_field, 'www', 2)
FROM old_table

但我不知道如何获得所有其他人。

感谢您提前提供的帮助。

编辑:

PaparazzoKid 的解决方案对我来说做了一些改变。

我只需要进行一些更改,因为在我的例子中,URL 不是用空格分隔的,而是用换行符 [CHAR(10)] 分隔的,但它工作得很好,你可以在这里找到我的解决方案

http://sqlfiddle.com/#!2/88b882/2

或直接作为下面的代码:

CREATE TABLE tablename (
  id INT,
  name VARCHAR(80));

INSERT INTO tablename VALUES
(1, 'www.mysite.com
www.anothersite.com
www.siteone.com'),
(2, 'www.sitetwo.net');

我修改后的SQL代码:

SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, CHAR(10), numbers.n), CHAR(10), -1) url
FROM
  (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
  UNION ALL SELECT 5 UNION ALL SELECT 6) numbers INNER JOIN tablename
  ON CHAR_LENGTH(REPLACE(tablename.name,CHAR(10), '  '))
     -CHAR_LENGTH(tablename.name)>=numbers.n-1
ORDER BY
  n 

最佳答案

这可能会让您朝着正确的方向前进:

使用此临时数据:

CREATE TABLE oldTable (
  id INT,
  url VARCHAR(80));

INSERT INTO oldTable VALUES
(1, 'www.mysite.com www.anothersite.com www.siteone.com'),
(2, 'www.sitetwo.net');

CREATE TABLE newTable (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  oldID INT,
  url VARCHAR(100));

此查询有效:

INSERT INTO newTable (oldID, url) 
    SELECT
      oldTable.id,
      SUBSTRING_INDEX(SUBSTRING_INDEX(oldTable.url, ' ', numbers.n), ' ', -1) url
    FROM
      (SELECT 1 n UNION ALL SELECT 2
       UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN oldTable
      ON CHAR_LENGTH(oldTable.url)
         -CHAR_LENGTH(REPLACE(oldTable.url, ' ', ''))>=numbers.n-1
    ORDER BY
      id, n

结果:

SELECT * FROM newTable

id  | oldID | URL
----|-----------------------
1   | 1     | www.mysite.com
2   | 1     | www.anothersite.com
3   | 1     | www.siteone.com
4   | 2     | www.sitetwo.net

See the SQLFIDDLE demo here

关于mysql - mysql 查询中的分隔行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785438/

相关文章:

mysql - SQL Select - 某些行不会显示

Excel公式查找单元格中最短的字符串/两位数字

linux - Bash: ${string:$i:1} 这是什么意思?

sql-server - SQL Server : select text between 3rd and 4th occurrence of '.'

MySQL 显然无法区分字符串

PHP 从表行中检索数据并存储到变量

php - 获取字符串的子串

javascript - 如何在不拆分单词的情况下设置 100 个字符限制?

php - 清理mysql搜索字符串的功能(主要是删除通配符)?

MySQL:浮点将大值转换为指数