установить значение столбца для части строки в другом столбце - PullRequest
0 голосов
/ 21 января 2010

У меня есть таблица со столбцом с именем CustomerName, в которой хранится полное имя клиента (то есть оба имени клиента - имя, фамилия и любые другие имена).

Я хочу изменить эту таблицу так, чтобы вместо поля CustomerName у меня были CustomerFirstName, CustomerLastName и CustomerOtherNames (тогда customerName может быть объединением 3 полей).

у меня уже есть записи клиентов в таблице с именами клиентов в формате ниже

CustomerName

Том Джон

Мэри Джой

Сан Рой

Теперь мне нужно выполнить запрос на обновление, в котором Том, Мэри и Сан установятся как CustomerFirstName, а Джон, Джой и Рой - как CustomerLastName для соответствующих строк, но я застрял на этом.

Ответы [ 3 ]

1 голос
/ 21 января 2010

Следующее объединяет формулы, предложенные Мэттом (Лима), в фактический запрос ОБНОВЛЕНИЯ; это также касается различных случаев, таких как

  • когда есть только FirstName,
  • при наличии начальных или конечных пробелов
  • когда есть несколько пробелов, отделяющих имя от фамилии

В качестве альтернативы можно отказаться от дополнительных тестов, направленных на обеспечение пробела, добавив предложение WHERE (WHERE CustomerName like ('%%').

-- Ensure no leading nor trailing spaces
UPDATE myTable
SET CustomerName = TRIM(CustomerName)

UPDATE myTable
SET FirstName = TRIM(LEFT(TRIM(CustomerName), 
                     CASE CHARINDEX(' ', CustomerName) 
                       WHEN 0 THEN LEN(CustomerName) 
                       ELSE CHARINDEX(' ', CustomerName) -1 
                     END)),
    LastName = CASE CHARINDEX(' ', CustomerName)
                  WHEN 0 THEN '' 
                  ELSE TRIM(SUBSTRING(CustomerName, CHARINDEX(' ', CustomerName) + 1, LEN(CustomerName))  
               END 
1 голос
/ 21 января 2010

Вы можете использовать что-то вроде:

SELECT SUBSTRING(CustomerName, 1, CHARINDEX(' ', CustomerName) - 1) AS [FirstName],
SUBSTRING(CustomerName, CHARINDEX(' ', CustomerName) + 1, LEN(CustomerName)) AS [LastName]
FROM yourTableName

Я получил это решение: http://www.sql -server-helper.com / tips / split-name.aspx

Надеюсь, это поможет.

Мэтт

0 голосов
/ 21 января 2010

Попробуйте что-то вроде: Выберите SUBSTR (CustomerName, 1, INSTR (CustomerName, '', 1, 1) -1) в качестве first_name, SUBSTR (CustomerName, INSTR (CustomerName, '', 1,1)) в качестве last_name из yourTableName

(оракул)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...