我如何分割一个具有第一个,最后一个和中间名的列。在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)))
答案 0 :(得分:2)
是否要将其作为结果集的一部分拆分为列,在表上创建计算列,或者实际更新架构以在源中拆分数据?
在任何情况下,基本的螺母和螺栓都可以通过以下方式完成:
使用CHARINDEX,SUBSTRING和LEFT或RIGHT的组合来查找逗号或空格并分开。如果您确定数据始终是“L_NAME,F_NAME M_NAME_OR_INITIAL”,那将非常简单。实际上我很惊讶我没有在谷歌搜索的顶部附近找到类似的问题,但有一个类似于SQLServerCentral的例子。
通过CLR使用RegEx,如果数据有任何变化,则可以更加健壮。如果您熟悉RegEx,这应该是一个直接的解析。同样,可以在MSDN上找到简化示例。
无论您选择什么,您可能会很快遇到不易遵循该格式的名称。在这种情况下,您希望在函数中构建更多逻辑来处理不同类型的名称。