如何在SQL中拆分名称

时间:2016-05-25 05:33:37

标签: sql

我的表中有一个列有1000个名字。我想通过以新格式拆分名称来创建一个新列:示例:

Santosh Kumar Yadav

应该是:

Santosh K Yadav

只有首字母和其他名称的中间名应该相同。

我该怎么做?

6 个答案:

答案 0 :(得分:1)

如果你想要做的就是用Initial替换第二个名字。这是MySQL数据库的一个想法。

假设名称列的名称为name&要放置数据的新列是formatted_name。你可以试试这个。

UPDATE Users 
SET formatted_name = REPLACE(
                             name,
                             SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1), 
                             LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1), 1)
                             );

这是演示 http://sqlfiddle.com/#!9/4e5f95

答案 1 :(得分:0)

遵循Java中的解决方案

// get name from database and store in var1

String[] nameType = var1.split (' '); 
// divide var1 into firstname middlename lastname by splitting name with 'space'

var1 = nameType [0] + ' ' + nameType [1].substring (0, 1) + ' ' + nameType [2]; 
// combine name types, but only first letter of middle name

// write var1 in database

答案 2 :(得分:0)

请尝试使用以下代码。它在SQL Server 2012中运行良好。

注意:这仅适用于包含3个部分的名称。

DECLARE @Table TABLE (Name Varchar(100))
INSERT INTO @Table
(Name)
VALUES
('Santhosh Kumar Yadav'),
('John Thomas Mathew'),
('Thomas Mathew John'),
('Mathew John Thomas'),
('John Mathew Thomas')
SELECT 
    SUBSTRING(Name,1,CHARINDEX(' ',Name)+1) + 
    REVERSE(SUBSTRING(REVERSE(Name),1,CHARINDEX(' ',REVERSE(Name)))) AS Name
FROM 
    @Table 

答案 3 :(得分:0)

OP没有提到数据库供应商。 Oracle的示例版本:

with mynames (name) as 
(select 'Santosh Kumar Yadav'  from dual
 union all
 select 'Abc Defgh' from dual)
      select  
       case when length(name) - length(replace(name, ' ', '')) + 1 < 3 then 
        name
       else 
      regexp_replace(name,'(^| )([^ ])([^ ])*',' \2',2, 1) 
      end 
     from mynames

当字符串超过2个单词时,它仅替换字符串中的第二个单词。

答案 4 :(得分:0)

对于这个结果,如

  'Santosh Kumar Yadav'成为'Santosh K Yadav'

。您应该创建一个转换

的函数
  从'Santosh Kumar Yadav'变成'Santosh K Yadav'

Automatic

将所有中间名转换为一个字符

答案 5 :(得分:-1)

试试这个: -

select substring('Santosh Kumar Yadav',1,charindex(' ','Santosh Kumar Yadav')+1) + reverse(substring(reverse('Santosh Kumar Yadav'),1,charindex(' ',reverse('Santosh Kumar Yadav'))))