【问题标题】:sql server split namesql server 拆分名称
【发布时间】:2012-02-07 04:24:54
【问题描述】:

我只是想问一下如何使用 SQL Server 2008 拆分名称。我找到了这段代码 Split Name

这是代码

 SELECT SUBSTRING(Leadname, 1, NULLIF(CHARINDEX(' ', Leadname) - 1, -1)) AS [FirstName],
 SUBSTRING(Leadname, CHARINDEX(' ', Leadname) + 1, LEN(Leadname)) AS [LastName]
 FROM Customer

假设数据是“John Doe”,使用该查询,输出如下:

   First Name    Last Name
   John          Doe

但在我的客户表中,我的 Leadname 只有一个词,例如 John。使用该查询,我得到这样的结果:

   First Name   Last Name
   NULL         John

我想要的,如果我的 Leadname 中只有一个单词,结果是

   First Name   Last Name
   John         NULL

我应该怎么做?

谢谢

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    这行得通:

    SELECT 
     SUBSTRING(Name, 1, case when CHARINDEX(' ', Name) = 0 then LEN(Name) else CHARINDEX(' ', Name) end) AS [FirstName],
     case when CHARINDEX(' ', Name) = 0 then null else  SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)) end
     AS [LastName]
     FROM (
        select 'jon doe' Name
        union 
        select 'jon'
     ) X
    

    结果:

    名字姓氏 --------- -------- 乔恩·多伊 乔恩空 (2 行受影响)

    您可以使用user defined function 使其更简洁,尽管效率稍低

    【讨论】:

    • 感谢您的帮助。它适用于我的桌子。再次,非常感谢您
    【解决方案2】:

    如果您需要将 FullName 拆分为现有行,可以使用下面的更新语句。

    update Customer    
    set FirstName = SUBSTRING([FullName],1,CHARINDEX(' ',[FullName]))
    set LastName = SUBSTRING([FullName],CHARINDEX(' ',[FullName]),LEN([FullName]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2018-05-05
      • 2012-06-10
      • 2011-01-31
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多