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

尝试在sql中删除首字母之间的空格,sql,sql-server,Sql,Sql Server,我有一个包含人名的列,我需要将其提取以传递给另一个系统,但我需要删除空格,但仅从首字母之间删除 例如,我可能有 A B Bloggs先生我想要AB Bloggs先生或 ABC-Bloggs夫人我想要ABC-Bloggs夫人 由于表中有数百万条记录,我不知道有多少首字母,或者确实有没有首字母。我只知道前缀(Mr、Mrs等)将超过1个字符,姓氏也将超过1个字符。我试过使用trim,replace,charindex,但显然没有正确的组合。非常感谢您的帮助。不幸的是,SQL server不支持正则表达

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

A B Bloggs先生
我想要
AB Bloggs先生

ABC-Bloggs夫人
我想要
ABC-Bloggs夫人


由于表中有数百万条记录,我不知道有多少首字母,或者确实有没有首字母。我只知道前缀(Mr、Mrs等)将超过1个字符,姓氏也将超过1个字符。我试过使用
trim
replace
charindex
,但显然没有正确的组合。非常感谢您的帮助。

不幸的是,SQL server不支持正则表达式。您有两个选择:

  • 在CLR中使用.Net执行转换。此链接说明如何使用CLR在SQL server中实现正则表达式:

  • 另一个选项是使用光标遍历所有记录并转换每个条目。这对于一张大桌子来说可能很慢。例如,您可以编写一个函数,返回由单个字母包围的空格的位置,然后将其删除。诀窍是在您录制完所有这些内容之前不要删除它们,然后从右向左删除它们以避免位置更改

  • 试试这个:

    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)))))
    

    您应该包括您正在使用的DBMS。正则表达式可能会支持这一点,但只有某些数据库支持它。您的数据集中是否有多个单词的姓氏(例如,
    S van der Valk先生
    )?@TimBiegeleisen-我只是在探索其他公式。例如,如果数据很简单,它可能可以转换为“用空字符串替换字符串中除第一个和最后一个空格以外的所有空格”@TimBiegeleisen-charindex此时运行此命令,将让您了解它的外观。如果删除所有单词之间的空格,我需要具体说明1个字符的首字母缩写