2017-01-06 4 views
0

У меня есть несколько миллионов записей в базе данных MySQL со следующими столбцами: company, address, url, phone, categoryколонки Split MYSQL на несколько столбцов

Вот пример строки: 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? Я не уверен, с чего начать, поскольку некоторые строки не имеют адреса. Может быть, подсчет символов с конца столбца?

Любая помощь приветствуется. Спасибо.

+0

Я бы использовал ваши запятые в качестве разделителей и считая в обратном fr om конец строки. Первым сектором будет zip, затем состояние, город и улица, если существует. Прочитайте это: http://stackoverflow.com/questions/2696884/split-value-from-one-field-to-two – CodeGodie

+0

Мой подход будет писать скрипт PHP, который захватывает этот столбец и использует функцию разрыва PHP на '-' Вы также можете использовать 'isnumeric ($ zip)' для обеспечения его действительной или, по крайней мере, для разных США из Канады. –

+0

Если вы уверены, что только улица может отсутствовать, то решение, предлагаемое CodeGodie, является правильным. Но если другие поля тоже могут отсутствовать, я подозреваю, что вам нужна какая-то проверка ... – Aerendir

ответ

2

Предположим, что ваши данные на самом деле выглядит как следующее:

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

Упс есть дополнительная запятая на улице, это домашняя работа для вас, чтобы исправить :)

+0

извините за задержку, отличный ответ! – dkeeper09

Смежные вопросы