我有一个mysql数据库,其中几个URL保存在一个字段中(见下文)。我现在需要将这些URL分开以将它们插入到新数据库中,其中每个URL都有自己的ID /行。
不幸的是,到目前为止,我只是将第一个URL与使用Substring的其他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
答案 0 :(得分:2)
这可能会让你朝着正确的方向前进:
使用此临时数据:
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