2014-12-22 6 views
0

Добрый день! я получаю "Varchar", который является полным именем клиента, и нужно разделить этот "VARCHAR", как:SQL Server отдельно: FirstName, MiddleName и LastName

  • "FirstName MidleName MiddleNameTwo LastName"

  • нужно ввести «ПгвЬЫат "на "Col1"

  • нужно ввести "MiddleName, MiddleNameTwo в" col2"

  • нужно ввести "LastName" в "Col3"

Спасибо за помощь!

+3

Пожалуйста, измените свой вопрос и предоставить образцы того, что имена похожи. Кроме того, используете ли вы SQL Server (как указано в заголовке) или MySQL (как это было предложено тегами)? –

+1

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

ответ

0

Вы должны использовать подзапросы для решения этой задачи

INSERT INTO names(firstname, middlename, lastname) 
SELECT substringfunctionofyours(name), substringfunctionofyours(name), 
substringfunctionofyours(name) FROM namefield 

иметь в виду, что это просто фиктивная запрос не будет работать, если вы используете его как этот

0

Вы можете изменить метод ввода до 4 отдельных полей?

Если вы не можете, то примените конкретный делиметр между различными частями строки? В тех случаях, когда фамилия построена на 2 слова, нет детерминированного способа обработки строки, если разделитель является [пробелом] или любым другим символом типа '-' или ', который является общим в именах.

Использование делиметра типа '|' :

Declare @FullName varchar(100) = 'FirstName|MidleName|MiddleNameTwo|LastName' 
Print 'FirstName = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'MiddleName1 = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'MiddleName2 = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'LastName = ' + @FullName 

Это будет работать, если у вас нет одной детали, если вы поддерживаете структуру.

Declare @FullName varchar(100) = 'FirstName|MidleName||LastName' 
Print 'FirstName = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'MiddleName1 = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'MiddleName2 = ' + Substring(@FullName,1,charindex('|',@FullName)-1) 
SELECT @FullName = Substring(@FullName,charindex('|',@FullName)+1,len(@fullName)) 
Print 'LastName = ' + @FullName 
0

Пусть у вас есть имя, как этот "ABC DEF GHI"

теперь вы хотите First Name, Middle Name и last Name Из этой строки.

Here We Go

Select 
Substring(Cast('ABC DEF GHI' as nvarchar),0,charindex(' ',Cast('ABC DEF GHI' as nvarchar))) as Col1, 
Substring(Cast('ABC DEF GHI' as nvarchar),charindex(' ',Cast('ABC DEF GHI' as nvarchar)),4)as Col2, 
Substring(Cast('ABC DEF GHI' as nvarchar),8,charindex(' ',Cast('ABC DEF GHI' as nvarchar)))as Col3 

Примечание:This is MSSQL SERVER Query and Substring Function is Built in in MSSQL SERVER

Смежные вопросы