0

私は問題があります。

私のこの関数は、1 つのことを除いて、私が望むすべてのことを行います。また、文字列からスペースを削除します。これは望ましくありません。

ここからさまざまなヒントやアイデアを試してみましたが、うまくいきません。ドキュメントには、私が正しく使用していると書かれていますが、誤解している可能性があります。誰か助けてくれませんか?

CREATE DEFINER=`user`@`%` FUNCTION `fn_RemoveNumbers`(str varchar(8000)) RETURNS varchar(767) CHARSET latin1
BEGIN
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret varchar(767) DEFAULT ''; 
  DECLARE c CHAR(1); 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF (c REGEXP '[[:alpha:]]') OR (c REGEXP '[[:space:]]') THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END

(c REGEXP '[[:space:]]') は、最終的な文字列に char を追加する必要がありますが、そうではありません。

「 」、「[ ]」なども試しましたが、成功しませんでした。

私はmysqlバージョン5.6を使用しています。このドキュメントを使用しました: http://dev.mysql.com/doc/refman/5.6/en/regexp.html

4

2 に答える 2

0

ここでUDFをテストすることはできませんが、次のように1つの正規表現にしようとします:

IF c REGEXP '[[:alpha:]]|[[:space:]]' THEN

非標準のスペースを扱っている可能性はありますか? 非改行スペースが好きですか?その場合、おそらくこれはすべての空白をキャッチするために機能します:

IF c REGEXP '[[:alpha:]]|[[:blank:]]' THEN

または、数字のみを削除しようとしている場合は、次のようになります。

IF c NOT REGEXP '[[:digit:]]' THEN
于 2013-09-26T18:45:29.993 に答える