Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL server替换可变数量的内部空白,并替换为一个空格_Sql Server_Replace_Whitespace - Fatal编程技术网

Sql server SQL server替换可变数量的内部空白,并替换为一个空格

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

我一直在寻找一种方法,用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       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定义:)