Sql server SQL server替换可变数量的内部空白,并替换为一个空格
我一直在寻找一种方法,用SQL查询中的单个空格替换字符串之间的所有空白。我已经找到了很多要替换的引用,除了要替换的字符串必须精确之外,这些引用都可以正常工作 我怎样才能改变Sql server SQL server替换可变数量的内部空白,并替换为一个空格,sql-server,replace,whitespace,Sql Server,Replace,Whitespace,我一直在寻找一种方法,用SQL查询中的单个空格替换字符串之间的所有空白。我已经找到了很多要替换的引用,除了要替换的字符串必须精确之外,这些引用都可以正常工作 我怎样才能改变 Bob Jones to Bob Jones Jim Jones to remain the same Jeff Jones to Jeff Jones 谢谢你的帮助 DECLARE @String1 VARCHAR(1000) = 'Jeff Jones to Jeff
Bob Jones to Bob Jones
Jim Jones to remain the same
Jeff Jones to Jeff Jones
谢谢你的帮助
DECLARE @String1 VARCHAR(1000) = 'Jeff Jones to Jeff Jones'
DECLARE @String2 VARCHAR(1000) = 'Bob Jones to Bob Jones'
SELECT REPLACE(REPLACE(REPLACE(@String1,' ',' '+CHAR(1)) ,CHAR(1)+' ',''),CHAR(1),'') AS Col
SELECT REPLACE(REPLACE(REPLACE(@String2,' ',' '+CHAR(1)) ,CHAR(1)+' ',''),CHAR(1),'') AS Col
结果
Col
Jeff Jones to Jeff Jones
Col
Bob Jones to Bob Jones
用户定义功能
CREATE FUNCTION udf_ReplaceWhiteSpace(@String NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @RtnString NVARCHAR(MAX);
SET @RtnString = REPLACE(REPLACE(REPLACE(@String,' ',' '+CHAR(1)) ,CHAR(1)+' ',''),CHAR(1),'');
RETURN @RtnString;
END
UDF测试
DECLARE @String VARCHAR(1000) = 'Jeff Jones to Jones till the end'
SELECT dbo.udf_ReplaceWhiteSpace(@String)
Jeff Jones to Jones till the end
返回的结果
DECLARE @String VARCHAR(1000) = 'Jeff Jones to Jones till the end'
SELECT dbo.udf_ReplaceWhiteSpace(@String)
Jeff Jones to Jones till the end
有几种方法可以实现这一点,您选择实现哪种方法主要取决于每种方法的性能 这里详细介绍了所有方法:通过 这里是第一个方法,它使用递归。我已经更新了示例代码以满足您的需求 方法1-代码(功能):
CREATE FUNCTION dbo.RemoveMultipleSpaces (@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF CHARINDEX(' ', @str) = 0
RETURN @str;
RETURN dbo.RemoveMultipleSpaces(REPLACE(@str, ' ', ' '));
END
GO
DECLARE @s VARCHAR(MAX) = 'Bob Jones';
DECLARE @s1 VARCHAR(MAX) = 'Jim Jones';
DECLARE @s2 VARCHAR(MAX) = 'Jeff Jones';
SELECT @s as BeforeString, dbo.RemoveMultipleSpaces(@s) AS AfterString
UNION
SELECT @s1 as BeforeString, dbo.RemoveMultipleSpaces(@s1) AS AfterString
UNION
SELECT @s2 as BeforeString, dbo.RemoveMultipleSpaces(@s2) AS AfterString
BeforeString AfterString
Bob Jones Bob Jones
Jim Jones Jim Jones
Jeff Jones Jeff Jones
方法1示例:
CREATE FUNCTION dbo.RemoveMultipleSpaces (@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF CHARINDEX(' ', @str) = 0
RETURN @str;
RETURN dbo.RemoveMultipleSpaces(REPLACE(@str, ' ', ' '));
END
GO
DECLARE @s VARCHAR(MAX) = 'Bob Jones';
DECLARE @s1 VARCHAR(MAX) = 'Jim Jones';
DECLARE @s2 VARCHAR(MAX) = 'Jeff Jones';
SELECT @s as BeforeString, dbo.RemoveMultipleSpaces(@s) AS AfterString
UNION
SELECT @s1 as BeforeString, dbo.RemoveMultipleSpaces(@s1) AS AfterString
UNION
SELECT @s2 as BeforeString, dbo.RemoveMultipleSpaces(@s2) AS AfterString
BeforeString AfterString
Bob Jones Bob Jones
Jim Jones Jim Jones
Jeff Jones Jeff Jones
方法1结果:
CREATE FUNCTION dbo.RemoveMultipleSpaces (@str NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF CHARINDEX(' ', @str) = 0
RETURN @str;
RETURN dbo.RemoveMultipleSpaces(REPLACE(@str, ' ', ' '));
END
GO
DECLARE @s VARCHAR(MAX) = 'Bob Jones';
DECLARE @s1 VARCHAR(MAX) = 'Jim Jones';
DECLARE @s2 VARCHAR(MAX) = 'Jeff Jones';
SELECT @s as BeforeString, dbo.RemoveMultipleSpaces(@s) AS AfterString
UNION
SELECT @s1 as BeforeString, dbo.RemoveMultipleSpaces(@s1) AS AfterString
UNION
SELECT @s2 as BeforeString, dbo.RemoveMultipleSpaces(@s2) AS AfterString
BeforeString AfterString
Bob Jones Bob Jones
Jim Jones Jim Jones
Jeff Jones Jeff Jones
您可以编写一个用户定义的函数来压缩字符串中的空格,然后使用UDF来更新表。@哈波:很好的建议我在回答中添加了一个UDF定义:)