从一列拆分字符串并将一部分字符串提取到sql中的另一列

时间:2014-06-18 11:54:06

标签: sql sql-server

我使用的是sql server 2008 r2。 当一个人以两种不同的格式将数据输入数据库时​​,问题就出现了。

该表格为:(您可以注意到“标题”列中有FNameLName,但它应分别位于FNameLName列。< / p>

 Title                      FirstName         LastName
 -------------------------------------------------------------------
 Prasident Ena Enic          null              null    *(not ok)*
 Prasident                   Hana              Hanic   *(ok)*
 Prasident Jack Johnson      null              null    *(wrong)*

所以我使用下面的代码将Title中的字符串分成3部分(TitleSFirstNameSLastName)。

ltrim(SUBSTRING (title ,CHARINDEX(' ', title)+1,
charindex(' ',title+' ',charindex(' ',title)+1)-charindex(' ',title)-1)),
ltrim(substring(title, charindex(' ',title,charindex(' ',title)+1), len(title)))

我得到了这种类型的od表。

SplittedTitle   SplittedFirstName  SplittedLastName  FirstName    LastName  
-------------------------------------------------------------------------------
Prasident        Ena                 Enic              null         null
Prasident        Prasident           Prasident         Hana         Hanic
Prasident        Jack                Johnson           null         null

现在我在FirstNameLastName中遇到空值问题。如何传输正确的数据(来自SplittedFirstName和SplittedLastName)而不是空值。我希望有人明白我的问题是什么。

任何人都有任何想法? 我应该使用哪种功能以及如何使用?

3 个答案:

答案 0 :(得分:0)

我想你想要更新。您可以使用可更新的CTE执行此操作:

with toupdate as (
      <your query here>
     )
update toupdate
    set FirstName = SplittedFirstName,
        LastName = SplittedLastName
    where FirstName is null and LastName is null;

答案 1 :(得分:0)

你的意思是这样的:

x+IsNull(y,'')

如果为空,则用空字符串替换y?

您可以找到有关此功能的更多信息here

答案 2 :(得分:0)

现在您需要做的就是在结果表上运行更新

UPDATE tablename  
SET   
FirstName = case when SplittedTitle <> SplittedFirstName  
                 then SplittedFirstName end,  
LastName = case when SplittedTitle <> SplittedLastName  
                then SplittedLastName end