[英]Split MYSQL column into multiple columns
我在 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中做到这一点? 我不确定从哪里开始,因为有些行没有地址。 也许从列的末尾计算字符?
任何帮助表示赞赏。 谢谢你。
假设您的数据实际上如下所示:
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
糟糕,街道上还有一个逗号,这是您要解决的作业:)
像我这样的谷歌员工的快速回答。
将列拆分为 3 的示例。如果您需要 2 列, new_column_name_2
在请求中省略new_column_name_2
。
适用于100x200x300
等100x200x300
变为100 200 300
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 '';
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`;
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.