将MYSQL列拆分为多个列

时间:2017-01-06 01:19:08

标签: php mysql

我在mysql数据库中有几百万条记录,其中包含以下列: company, address, url, phone, category

以下是一个示例行: Company123 - 123 Candyland St, New York, NY 12345 - http://urltothiscompany.com - 123-456-7890 - Bakery

我的问题是关于地址栏。我想将行拆分为单独的地址,城市,州和邮政编码列: 123 Candyland St - New York - NY - 12345

然而,有些行没有街道,只有城市,州和邮编: New York, NY, 1235

有没有办法在mysql中做到这一点?我不知道从哪里开始,因为有些行没有地址。也许从列的末尾开始计算字符?

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

假设您的数据实际上如下所示:

addr
=======================
street, City, State ZIP

这是SQL:

SELECT addr,
  substr(addr, 1, length(addr) - length(substring_index(addr, ',', -2))) street,
  substring_index(substring_index(addr, ',', -2), ',', 1) city,
  substr(trim(substring_index(addr, ',', -1)),1,2) state,
  substring_index(addr, ' ', -1) zip
FROM tab

enter image description here

OOP在街上有一个额外的逗号,这是你要修理的功课:)

答案 1 :(得分:0)

为我这样的谷歌员工提供快速解答。
将列分成 3 列的示例。如果您需要 2 列,请在请求中省略 new_column_name_2
适用于 100x200x300 之类的维度变为 100 200 300

  1. 创建新列。
ALTER TABLE `your_table_name` ADD `new_column_name_1` VARCHAR(250) DEFAULT '';
ALTER TABLE `your_table_name` ADD `new_column_name_2` VARCHAR(250) DEFAULT '';
ALTER TABLE `your_table_name` ADD `new_column_name_3` VARCHAR(250) DEFAULT '';
  1. 确认您选择了正确的内容
SELECT `old_column_name`,
SUBSTRING_INDEX(`old_column_name`, 'x', 1) `new_column_name_1`,
SUBSTRING_INDEX(SUBSTRING_INDEX(`old_column_name`, 'x', 2),'x',-1) `new_column_name_2`, 
SUBSTRING_INDEX(`old_column_name`, 'x', -1) `new_column_name_3`
FROM `your_table_name`;
  1. 填充新列
UPDATE `your_table_name` SET
`new_column_name_1` = SUBSTRING_INDEX(`old_column_name`, 'x', 1),
`new_column_name_2` = SUBSTRING_INDEX(SUBSTRING_INDEX(`old_column_name`, 'x', 2),'x',-1),
`new_column_name_3` = SUBSTRING_INDEX(`old_column_name`, 'x', -1);