试图删除sql中的首字母之间的空格

时间:2016-12-07 07:41:45

标签: sql sql-server

我有一个包含人名的列,我需要提取它以传递给另一个系统,但我需要删除空格,但只能从首字母之间删除 例如我可能有

Mr A B Bloggs我希望Mr AB Bloggs

Mrs A B C Bloggs我希望Mrs ABC Bloggs

由于表中有数百万条记录,我不知道有多少首字母或者确实存在任何首字母。我所知道的是前缀(先生,夫人等)将超过1个字符,姓氏也将如此。我尝试过使用trimreplacecharindex但显然没有使用正确的组合。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

不幸的是SQL服务器不支持正则表达式。您有两种选择:

  1. 在CLR中使用.Net来执行转换。此链接说明了如何使用CLR在SQL Server中实现正则表达式:https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/

  2. 其他选项是使用游标迭代所有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)))))