【发布时间】:2014-05-01 04:39:56
【问题描述】:
我有这样的场景
Kumar, Anand
S,Anand D
D,Ravi,K
现在,我必须使用一个查询从 SQL Server 中的上述场景中提取名字、中间名和姓氏。因为,从全名中获取中间名很难并且与名字相同,所以我尝试了
select
CASE
WHEN CHARINDEX(' ', REVERSE('D,Ravi,K')) = 0
THEN RIGHT('D,Ravi,K', CHARINDEX(',', REVERSE('D,Ravi,K')) - 1)
WHEN CHARINDEX(' ', REVERSE('D,Ravi,K')) > 0
THEN RIGHT('D,Ravi,K', CHARINDEX(' ', REVERSE('D,Ravi,K')) - 1)
END AS 'MIDDLE NAME'
但是,我遇到了错误
消息 536,第 16 级,状态 1,第 1 行
传递给正确函数的长度参数无效。
谁能帮我解决这个问题?
任何其他技术都可以提取上述值。
【问题讨论】:
-
您需要名字、中间名和姓氏作为 3 个差异列吗?对于数据
Kumar, Anand,Anaad 是中间名还是姓氏? -
是的..在三个不同的列中。
Anand将被视为First Name -
如果您正在处理/建模名称,最好成为该领域的专家。很有可能,你对名字的了解比你想象的要少。 W3C 有一篇名为 Personal names around the world 的好文章,当我第一次阅读时,它让我感到谦卑。
-
这个问题缺少基本信息。您的“场景”是否对每行中指定 F、L、M 的顺序做出任何假设?如果不是,则由您决定是什么使 F、L、M 成为可能,那么您肯定会在解析中出错。克里斯已经向你指出了原因。另请阅读stackoverflow.com/questions/5596706/… 和stackoverflow.com/questions/17455658/human-name-parsing
标签: sql sql-server space comma