この小さな関数 (オラクルの代替関数に似ています) を作成しました。ほとんどの文字で正常に機能しますが、スペースを置き換えない理由がわかりません...
誰かがこれに光を当てることができますか?
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 ;