2012-08-12 92 views
0

我已經創建了這個小函數(類似於oracle的替代函數),它對大多數字符都適用,但我無法弄清楚它爲什麼不能替代空格...MySQL的等價物Oracle的SUBSTITUTE函數 - 空間替換問題

請問有人可以對此有所瞭解嗎?

DROP FUNCTION IF EXISTS MPT_FUNC_SUBSTITUTE; 
DELIMITER // 
CREATE FUNCTION MPT_FUNC_SUBSTITUTE 
(
    p_in_str   VARCHAR(1000), 
    p_substitute_from VARCHAR(100), 
    p_substitute_to VARCHAR(100) 
) 
RETURNS VARCHAR(1000) 
DETERMINISTIC 
BEGIN 
#--+==============================================================================+ 
#--| Name  : MPT_FUNC_SUBSTITUTE           | 
#--|                    | 
#--| Description : Designed to search for platinum ads.       | 
#--|                    | 
#--| Parameters : p_in_str   [Mandatory] - The string to modify.   | 
#--|    p_substitute_from [Mandatory] - Susbtitute from string   | 
#--|    p_substitute_to [Mandatory] - Susbtitute to string   | 
#--|                    | 
#--| Returns  : p_out_str              | 
#--|                    | 
#--| Author    Date  Version Remarks        | 
#--| ------------------ ----------- --------- ----------------------------------- | 
#--| Leo Coppens  12-Aug-2012 1.0  Created        | 
#--|                    | 
#--+==============================================================================+ 

#-- DECLARE statements 
    DECLARE lc_api_name VARCHAR(30) DEFAULT 'MPT_PROC_SEARCHDEALERS'; 
    DECLARE i    INT   DEFAULT 1; 
    DECLARE chr1,chr2  CHAR(1); 
    DECLARE p_out_str  VARCHAR(1000) DEFAULT p_in_str; 

#-- Program Logic 

    #-- Do the replacement if the necessary values are provided 
    IF  p_in_str   IS NOT NULL 
    AND p_substitute_from IS NOT NULL 
    THEN 
    SET p_out_str = p_in_str; 
    #-- Start the replacement loop 
    WHILE i <= CHAR_LENGTH(p_substitute_from) 
    DO 
     #-- Get the characters to replace from and to 
     SET chr1 = SUBSTR(p_substitute_from, i, 1); 
     SET chr2 = IFNULL(SUBSTR(p_substitute_to, i, 1),''); 
     #-- Do the replacement now 
     SET p_out_str = REPLACE(p_out_str, chr1, chr2); 
     #-- Increase i to continue the loop 
     SET i = i + 1; 
    END WHILE; 

    RETURN p_out_str; 
    END IF; 

END // 

DELIMITER ; 

回答

0

在MySQL中已經有一個REPLACE功能:

SELECT REPLACE('www.mysql.com', 'w', 'Ww'); 

這不就是你想要什麼?

+0

嗨dyyyy這使用替換,但對於多個字符不只是當時的一個普通替換...但它不佔用空間的某種原因 – Leo 2012-08-12 13:16:13