Как вырезать среднюю букву из полного имени человека в SQL? - PullRequest
2 голосов
/ 28 сентября 2010

Я ищу самый простой способ разделить имя и фамилию, обрезая среднюю букву.Текущий макет поля: [Фамилия], [Имя] [МИ].Кроме того, средний инициал не всегда есть.Мой текущий код ниже, я просто не уверен, как вырезать среднюю букву из имени без написания оператора case.

SELECT SUBSTRING(h.Name, CHARINDEX(',', h.Name, 0) + 2, LEN(h.Name) - CHARINDEX(',', h.Name, 0)), 0 as FirstName
    ,SUBSTRING(h.Name, 0, CHARINDEX(',', h.Name, 0)) as LastName
FROM Members

Ответы [ 3 ]

4 голосов
/ 28 сентября 2010

Ниже я сделал несколько предположений:

1 - имена всегда длиннее, чем один символ.
2 - среднему инициалу всегда будет предшествовать пробел.обрезается.

Этот код вернет NULL, если что-либо из перечисленного не соответствует действительности.Если ваши данные не обрезаны, вы можете использовать RTRIM во всех случаях @n ниже для смягчения.

declare @n as varchar(50)
set @n = 'Smith, John A'
select @n, 
    case 
        when SUBSTRING(@n, LEN(@n) - 1, 1) = ' ' 
        then SUBSTRING(@n, LEN(@n), 1) 
    end
1 голос
/ 28 сентября 2010

Каковы бизнес-правила этой системы?Всегда ли это будет:

last name , first name пробел a possible middle initial

Какие еще могут быть перестановки?

Всегда ли это будет пробел буква . ?Потому что тогда вы всегда можете взять правильные три символа, найти пробел и точку, а затем удалить набор из трех.

0 голосов
/ 24 сентября 2012
select  REPLACE(firstName+ISNULL(middleName+' ','')+ISNULL( lastName +' ',''),'  ',' ') as 'name'  from  Contacts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...