0

SELECTクエリの名前フィールドから数字を削除する必要があります。数字は文字列の最後にある可能性があります。例は次のとおりです。

Some Name
Namewithnospace
NamewithInt 100   <--- I want to remove this int from the string

文字列の最初の部分にスペースが含まれないことを保証することはできませんが、数字が文字列の最後の部分になることはかなり確実です。また、ほとんどのデータにはスペースがありません。

REVERSE()を使用した解決策が必要であることがわかりSUBSTRING()ますが、スペースがないデータ、またはスペースはあるが整数がないデータをマングルしない方法を理解することはできません。

編集:以下は、Ollieが私に向けたMySQL C関数の定義であり、正規表現に変更が加えられています(関数の出力にスペースと句読点を含めるため)。

DELIMITER !

DROP FUNCTION IF EXISTS alphas! 

CREATE FUNCTION alphas ( str VARCHAR(255) ) 
               RETURNS VARCHAR(255) 
               DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret VARCHAR(255) DEFAULT ''; 
  DECLARE c VARCHAR(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 !
DELIMITER ; 
4

2 に答える 2

1

と呼ばれるこのストアド関数を自分で作成してくださいalphas。入力テキスト文字列の文字を 1 つずつ調べて、すべての数字を削除します。

DELIMITER !

DROP FUNCTION IF EXISTS alphas! 

CREATE FUNCTION alphas ( str VARCHAR(255) ) 
                   RETURNS VARCHAR(255) 
                   DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret VARCHAR(255) DEFAULT ''; 
  DECLARE c VARCHAR(1);   /* NOT CHAR!  NOT CHAR! NOT CHAR! */ 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF NOT c REGEXP '[[:digit:]]' THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END !
DELIMITER ; 

次に、これを行います。

 SELECT alphas(column) AS alphacolumn

これは、私がこの関数を盗用した便利なリソースです。 http://www.artfulsoftware.com/infotree/qrytip.php?id=815

于 2013-01-02T17:13:05.057 に答える
0

UDFを使用するオプションがある場合は、REGEXP_REPLACE を使用できます。パターンと一緒に使用して'[0-9]+$'数字を削除できます。

于 2013-01-02T13:43:38.103 に答える