我有一个包含人名的列,我需要提取它以传递给另一个系统,但我需要删除空格,但只能从首字母之间删除 例如我可能有
Mr A B Bloggs
我希望Mr AB Bloggs
或
Mrs A B C Bloggs
我希望Mrs ABC Bloggs
由于表中有数百万条记录,我不知道有多少首字母或者确实存在任何首字母。我所知道的是前缀(先生,夫人等)将超过1个字符,姓氏也将如此。我尝试过使用trim
,replace
,charindex
但显然没有使用正确的组合。任何帮助将不胜感激。
答案 0 :(得分:0)
不幸的是SQL服务器不支持正则表达式。您有两种选择:
在CLR中使用.Net来执行转换。此链接说明了如何使用CLR在SQL Server中实现正则表达式:https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/。
其他选项是使用游标迭代所有reocords并转换每个条目。对于大型桌子,这可能会很慢。例如,您可以编写一个函数来返回由单个字母包围的空格的位置,然后将其删除。诀窍不是在记录完所有内容之后将其删除,然后从右向左移除它们以避免位置发生变化。
答案 1 :(得分:0)
试试这个:
declare @test varchar(100)='Mrs A B C Bloggs'
select (substring (@test,0,charindex(' ',@test)))+' '+
replace(replace(replace(substring(@test,len((substring (@test,0,charindex(' ',@test))))+1,len(@test)),
(substring (@test,0,charindex(' ',@test))),''),reverse((substring (reverse(@test),0,charindex(' ',reverse(@test))))),''),' ','')
+' '+reverse((substring (reverse(@test),0,charindex(' ',reverse(@test)))))