2016-08-17 4 views
1

У меня время от времени. У меня есть таблица с 2 столбцами. имя и фамилия.Обновление, которое разбивает один столбец на два?

Данные, импортированные в SQL, имели как первое, так и последнее имя внутри столбца firstName.

Есть ли быстрый способ обновить таблицу, чтобы поместить все перед первым пространством в lastName и все после пробела в столбец firstName? Я знаю, что могу экспортировать, и делать это через Excel, но это близко к времени производства, поэтому я бы не рискнул проблем.

Я рассмотрел пару разных разделенных сообщений здесь, но они не требуют обновления одновременно.

+0

Вы уверены, что можете просто использовать первое пространство в качестве якоря для раскола и быть точным? Как насчет таких имен, как Мэри Энн Смит? – Nicarus

+0

Вы можете использовать строковые функции mysql в правой части назначений набора обновлений. Устанавливать назначения обрабатываются слева направо, поэтому перед удалением его с первого имени обязательно присвойте «конец» фамилии. – Uueerdo

+1

Обратите внимание, что, хотя вы разделили имена, вы получите неточности. «Джон Смит» легко разделить на пространства, но как насчет «Мэри Энн Саммерс» или «Эдварда Ван Халена»? Первый должен быть разделен на второе пространство, а второй - на первое пространство. Или как насчет «Мэри Энн Ван Хален»? Я не говорю, чтобы не продолжать, но имейте в виду, что разделяющие имена - это неточная наука. –

ответ

2

Попробуйте использовать:

UPDATE 
    table 
SET 
    lastname = SUBSTRING(firstName, 1, CHARINDEX(' ', firstName) - 1), 
    firstName= SUBSTRING(firstName, CHARINDEX(' ', firstName) + 1, LEN(firstName)) 
+0

Похоже, это сработает, но мой MySQL говорит, что ChARINDEX не является функцией. это для MySQL или MSSQL? –

+0

, который является [MSSQL] (https://msdn.microsoft.com/en-us/library/ms186323.aspx), вам необходимо использовать MySQL [INSTR] (https://dev.mysql.com/doc /refman/5.5/en/string-functions.html#function_instr) и соответствующим образом отрегулировать (т.е. заменить параметры). – Uueerdo

+0

Nicarus, в чем причина '' _'' вместо '' ''? Кроме того, похоже, что вы помещаете первое имя в поле lastname и пытаетесь поместить фамилию в firstname one (и вызов LEN() не нужен, а бит «iffy»). – Uueerdo

1

MySQL

Демонстрация:

SET @str := 'Robert Optional Dickey'; 

SELECT 
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1) AS lastName, 
SUBSTRING_INDEX(@str,' ',-1) AS firstName; 

Выход:

lastName   firstName 
Robert Optional  Dickey 

Update Query:

UPDATE your_table 
SET lastName = SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1), 
firstName = SUBSTRING_INDEX(@str,' ',-1); 

Примечание: Это будет работать для любого числа пробелов в полном name.It просто считает строку после последнего пробела в качестве имени.