0

この小さな関数 (オラクルの代替関数に似ています) を作成しました。ほとんどの文字で正常に機能しますが、スペースを置き換えない理由がわかりません...

誰かがこれに光を当てることができますか?

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 ;
4

1 に答える 1

0

MySql には、すでに REPLACE 関数があります。

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

これはあなたが望むものではありませんか?

于 2012-08-12T13:09:40.527 に答える