Как мне перевернуть столбец в MySQL, который имеет структурированные данные: «Фамилия, имя»? - PullRequest
2 голосов
/ 16 апреля 2010

Я хочу создать новый столбец в таблице MYSQL с Fn Ln вместо Ln, Fn. Большая часть моих данных напечатана Fn Ln.

Другая идея состоит в том, чтобы включать строковую функцию каждый раз, когда есть выход (на основе php), но это, похоже, тратит ресурсы. Наконец, я так и не смог найти синтаксис (loop или foreach) для моей функции php.

Вот рабочая функция php, которую я получил из предыдущего поста:

   $name = "Lastname, Firstname";
    $names = explode(", ", $name);
    $name = $names[1] . " " . $names[0];

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

Вы можете использовать функцию mysql SUBSTRING_INDEX , чтобы получить часть строки до указанного числа или вхождений.

Обязательно замените все, что у меня есть префиксом $, на то, что вы хотите, чтобы оно называлось

# Add new column
alter table $TABLE add $newField varchar(40); # or something like that

# Populate new data
update $TABLE set $newField = CONCAT(
  SUBSTRING_INDEX(SUBSTRING_INDEX($oldField,',',2),',',-1),
  ' ',
  SUBSTRING_INDEX($oldField,',',1)
);

Это разделяет поле имени и помещает вторую часть первой в новое поле, которое вы создали.

2 голосов
/ 16 апреля 2010

Посмотрите на использование

SUBSTRING_INDEX (str, delim, count)

RIGHT (str, len)

А

ВЛЕВО (стр., Лен)

КОНКАТ (стр. 1, стр. 2, ...)

ТакжеПочему эти поля хранятся в одном столбце?Разве не было бы легче, если бы они хранились в правильных полях FirName и отдельном столбце LastName?

Я немного больше SQL Server, но вы можете попробовать что-то вроде

SELECT  CONCAT( RIGHT(FirstNameLastName,LEN(FirstNameLastName) - SUBSTRING_INDEX(FirstNameLastName, ' ', 1)),
                ', ',
                LEFT(FirstNameLastName,SUBSTRING_INDEX(FirstNameLastName, ' ', 1) - 1)
                )
FROM    YourTable

РЕДАКТИРОВАТЬ:

Sql сервер выглядел бы так (интерес ради)

DECLARE @Table TABLE(
        FirstNameLastName VARCHAR(100)
)

INSERT INTO @Table SELECT 'Foo Bar'

SELECT  RIGHT(FirstNameLastName,LEN(FirstNameLastName) - PATINDEX('% %', FirstNameLastName)) + ', ' + LEFT(FirstNameLastName,PATINDEX('% %', FirstNameLastName) - 1)
FROM    @Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...