none
請問字串中去除空白值的方法 RRS feed

  • 問題

  • 各位SQL達人

    請教一下若字串值在資料欄中有多處兩個以上的空白

    比如說"AAA[space][space]BBB[space][space][space]C"

    如何能只各保留一個空白值"AAA[space]BBB[space]C"?

     

    謝謝

    2010年8月13日 上午 02:24

解答

  • 新增一個去除重複字元專用的純量函數:

    CREATE FUNCTION [dbo].[udf_trimDuplicateChar] 
    (
    	@token NVARCHAR(MAX),
    	@char CHAR(1)
    )
    RETURNS NVARCHAR(MAX)
    AS
    BEGIN
    	DECLARE @temp TABLE (val NVARCHAR(100))
    	DECLARE @node NVARCHAR(100)
    
    	WHILE LEN(@token) > 0
    	BEGIN
    		IF CHARINDEX(@char, @token) = 0
    		BEGIN
    			SET @node = @token
    			SET @token = ''
    		END
    		ELSE
    		BEGIN
    			SET @node = LEFT(@token, CHARINDEX(@char, @token)-1)
    			SET @token = RIGHT(@token, LEN(@token)-LEN(@node)-1)
    		END
    
    		INSERT INTO @temp (val) VALUES (@node)
    	END
    	
    	DECLARE @Result NVARCHAR(MAX)
    	SET @Result = '';
    	
    	SELECT @Result = @Result + 
    		CASE WHEN (LEN(LTRIM(RTRIM(val))) > 0) 
    			THEN LTRIM(RTRIM(val)) + @char 
    			ELSE '' 
    		END
    	FROM @temp;
    	
    	SET @Result = RTRIM(@Result);
    	
    	RETURN @Result
    END
    
    


    然後就可以這樣用:
    DECLARE 
    	@token NVARCHAR(100), 
    	@char CHAR(1)
    
    SET @token = 'AAA BBB CCC';
    SET @char = CHAR(32);	-- 空白字元
    
    SELECT dbo.udf_trimDuplicateChar(@token, @char) AS [String];
    GO
    

    Hunterpo's IT Vision - http://www.dotblogs.com.tw/hunterpo/
    2010年8月13日 上午 08:10

所有回覆

  • Tried with replace function like 'update table set col = replace(col, '  ', ' ') where ...'?
    2010年8月13日 上午 03:17
  • 新增一個去除重複字元專用的純量函數:

    CREATE FUNCTION [dbo].[udf_trimDuplicateChar] 
    (
    	@token NVARCHAR(MAX),
    	@char CHAR(1)
    )
    RETURNS NVARCHAR(MAX)
    AS
    BEGIN
    	DECLARE @temp TABLE (val NVARCHAR(100))
    	DECLARE @node NVARCHAR(100)
    
    	WHILE LEN(@token) > 0
    	BEGIN
    		IF CHARINDEX(@char, @token) = 0
    		BEGIN
    			SET @node = @token
    			SET @token = ''
    		END
    		ELSE
    		BEGIN
    			SET @node = LEFT(@token, CHARINDEX(@char, @token)-1)
    			SET @token = RIGHT(@token, LEN(@token)-LEN(@node)-1)
    		END
    
    		INSERT INTO @temp (val) VALUES (@node)
    	END
    	
    	DECLARE @Result NVARCHAR(MAX)
    	SET @Result = '';
    	
    	SELECT @Result = @Result + 
    		CASE WHEN (LEN(LTRIM(RTRIM(val))) > 0) 
    			THEN LTRIM(RTRIM(val)) + @char 
    			ELSE '' 
    		END
    	FROM @temp;
    	
    	SET @Result = RTRIM(@Result);
    	
    	RETURN @Result
    END
    
    


    然後就可以這樣用:
    DECLARE 
    	@token NVARCHAR(100), 
    	@char CHAR(1)
    
    SET @token = 'AAA BBB CCC';
    SET @char = CHAR(32);	-- 空白字元
    
    SELECT dbo.udf_trimDuplicateChar(@token, @char) AS [String];
    GO
    

    Hunterpo's IT Vision - http://www.dotblogs.com.tw/hunterpo/
    2010年8月13日 上午 08:10