簡體   English   中英

將 MYSQL 列拆分為多列

[英]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
適用於100x200x300100x200x300變為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM