SQL:将第一个,最后一个和中间名分成自己的列?

时间:2014-02-25 15:39:59

标签: sql sql-server sql-server-2008

我如何分割一个具有第一个,最后一个和中间名的列。在SQL Server 2008查询中有自己的单独列?

该列名为NAME

NAME(char(25),null)

Mctasrren ,David Max
Cressler ,Patti L
Basil ,Vessen Eddie
Chapplestait ,Victoy

这是我到目前为止使用的主要问题是中间名。或者如果某人有更好的方法来缩短名字代码。

- 姓氏代码

 left([NAME],charindex(' ,',[NAME]))

- 第一个名字代码

substring([NAME],charindex(',',[NAME])+1,charindex(' ',substring([NAME],charindex(',',[NAME])+1,25-charindex(',',[NAME])+1)))

1 个答案:

答案 0 :(得分:2)

是否要将其作为结果集的一部分拆分为列,在表上创建计算列,或者实际更新架构以在源中拆分数据?

在任何情况下,基本的螺母和螺栓都可以通过以下方式完成:

  1. 使用CHARINDEX,SUBSTRING和LEFT或RIGHT的组合来查找逗号或空格并分开。如果您确定数据始终是“L_NAME,F_NAME M_NAME_OR_INITIAL”,那将非常简单。实际上我很惊讶我没有在谷歌搜索的顶部附近找到类似的问题,但有一个类似于SQLServerCentral的例子。

  2. 通过CLR使用RegEx,如果数据有任何变化,则可以更加健壮。如果您熟悉RegEx,这应该是一个直接的解析。同样,可以在MSDN上找到简化示例。

  3. 无论您选择什么,您可能会很快遇到不易遵循该格式的名称。在这种情况下,您希望在函数中构建更多逻辑来处理不同类型的名称。