Разделите полное имя на первое и последнее и удалите «мусор» - PullRequest
0 голосов
/ 20 июня 2019

Не был уверен в лучшем способе сказать это.Итак, у меня есть столбец с именами, как показано ниже:

SalesPerson_Name
----------------
Undefined - 0
Sam Brett-sbrett
Kelly Roberts-kroberts
Michael Paramore-mparamore
Alivia Lawler-alawler
Ryan Hooker-rhooker
Heather Alford-halford
Cassandra Blegen-cblegen
JD Holland-jholland
Vendor Accounts-VENDOR
Other Accounts-OTHER

Разделить имена достаточно легко с помощью функций PARSENAME и REPLACE, но я сталкиваюсь с рассолом - избавлением от мусора'в конце:

SELECT SalesPerson_Key
    ,SalesPerson_Name
    ,CASE 
        WHEN PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 2) IS NULL
            THEN PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 1)
        ELSE PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 2)
        END AS FirstName
    ,CASE 
        WHEN PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 2) IS NULL
            THEN NULL
        ELSE PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 1)
        END AS LastName
FROM Salesperson

РЕЗУЛЬТАТЫ ДЛЯ КОЛОННЫ ИЗ ФИЛЬМА:

LastName
--------
0
Brett-sbrett
Roberts-kroberts
Paramore-mparamore
Lawler-alawler
Hooker-rhooker
Alford-halford
Blegen-cblegen
Holland-jholland
Accounts-VENDOR
Accounts-OTHER

В частности, я хочу избавиться от текста (ИД пользователя) в конце фамилии.Если бы имена были одинаковой длины, я мог бы просто использовать функцию RIGHT, но они различаются по длине.Идеи?

Ответы [ 3 ]

0 голосов
/ 20 июня 2019
select left(PARSENAME(REPLACE(SalesPerson_Name, ' ', '.'), 1), len(SalesPerson_Name)-CHARINDEX('-',SalesPerson_Name)-1)

Вы получаете хариндекс из - и берете его левую строку.

0 голосов
/ 20 июня 2019

Рассмотрим, следует ли за hyphen знак space или нет, и разделим в зависимости от этих двух случаев

with Salesperson( SalesPerson_Name ) as
(
 select 'Undefined - 0'              union all
 select 'Sam Brett-sbrett'           union all
 select 'Kelly Roberts-kroberts'     union all
 select 'Michael Paramore-mparamore' union all
 select 'Alivia Lawler-alawler'   
)
select case when substring(SalesPerson_Name,charindex(' ',SalesPerson_Name)+1,1) = '-' then
         substring(SalesPerson_Name,charindex(' ',SalesPerson_Name)+3,len(SalesPerson_Name))
       else
         substring(SalesPerson_Name,charindex(' ',SalesPerson_Name)+1,len(SalesPerson_Name))
       end as last_name          
  from Salesperson s;

last_name
------------------
0
Brett-sbrett
Roberts-kroberts
Paramore-mparamore
Lawler-alawler
0 голосов
/ 20 июня 2019

Если вы просто хотите удалить последнее слово (имя пользователя), вы можете использовать запрос, подобный этому

select
  rtrim(
    substring(
      SalesPerson_Name,
      1,
      charindex('-',SalesPerson_Name,1)-1
    )
  )
from Salesperson

Функция charindex находит вхождение искомого символа / символов.

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