【发布时间】:2018-07-30 12:38:05
【问题描述】:
我正在尝试使用 substring、instr 和 charindex 的组合,以始终如一地从组合字符串值中获取名称,格式如下:
"Lastname,Firstname MiddleName"
我必须能够考虑以下逻辑:
- 某些名称(包括名、中间名、包括最后在内)是连字符的。
- 除了名字和中间名之间的空格之外什么都没有。
- 您不必有中间名。
这是我目前所拥有的
,SUBSTRING(p.Name,1,INSTR(p.Name,',',1) - 1) as "Patient Surname"
,SUBSTRING(p.Name,INSTR(p.Name,' ',1) + 1, INSTR(p.Name,' ')) as "Patient Middle Name"
,SUBSTRING(p.Name,INSTR(p.Name,',',1) + 1, INSTR(p.Name,' ')) as "Patient First Name"
我也尝试过这样的事情来获得名字。
,SUBSTRING(p.Name,charindex('','',p.Name)+1, charindex(',',reverse(p.Name))) as "Patient First Name"
我似乎对姓氏很有信心。 名字和中间名是我努力捕捉的。任何人都可以帮忙吗?
这里有一些我必须使用的示例名称。
- 熊,布布棕
- 测试,Edis 女
- Kgh-cdr,青色蜡笔
- Kghcdr,Amber B
- 猛龙队,多伦多篮下
- Pcstest,图表审查
- Medrec,测试人一号
- 圣。蓝精灵,贝克
- 水果,红味-百胜
- 水果、青苹果苹果酱
- 水果、青葡萄
- ZZSivagnanasundaram,TestLongName 测试中间名
- 鱼,蓝一号
- 鱼,试粉
- 蓝精灵,懒骨头
- 水果,石榴红
- 水果、石榴新
- O'Fruit,Banana Too
- 划船,划船
- 水果,芒果秒
【问题讨论】:
-
如果某人没有中间名怎么办?这假设他们确实......
-
更新了该条件。谢谢!
-
所以如果没有中间名就没有空格?您可以编写一个 CASE 并检查逗号后是否有空格,如果没有则将中间名设为 NULL
-
在这种情况下,我的代码似乎唯一关心的是 St. Smurf,Baker - 但我想我已经通过寻找 , 字符后面的空格来解决这个问题 - 诸如连字符无关紧要,因为我不是在寻找它,它也可以使用空格和逗号以外的任何字符
-
您尝试做的事情基本上是不可能的。一旦您为当前数据找到解决方案,就会有其他东西出现并破坏它。此外,您可能想看看这个。 kalzumeus.com/2010/06/17/…
标签: sql-server sql-server-2008 concatenation