1

文字と数字が混在する列があります。列からアルファベット文字の最初のセットを取得する必要があります。整数が検出されるとすぐに、私はもう必要ありません。たとえば、次のようになります。

5行を取る:

  • S123J90
  • SF91K88
  • JK12K99
  • X129PL9
  • ABCD123

これらの5行から次のデータが必要です

  • S
  • SF
  • JK
  • バツ
  • あいうえお

ネストされたREPLACEクエリについて多くの話を見つけましたが、もっと良いオプションがあると確信していますか?

注:すべての行は、少なくとも1つの英字で始まります


更新:この関数の変更http://www.rummandba.com/2011/02/mysql-function-to-remove-non.htmlを次のように使用しました

DROP FUNCTION IF EXISTS remove_non_alpha_char_f //
CREATE FUNCTION remove_non_alpha_char_f (prm_strInput varchar(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;
  DECLARE v_char VARCHAR(1);
  DECLARE v_parseStr VARCHAR(255) DEFAULT ' ';

WHILE (i <= LENGTH(prm_strInput) )  DO 

  SET v_char = SUBSTR(prm_strInput,i,1);
  IF v_char REGEXP  '^[A-Za-z ]+$' THEN  #alpha

        SET v_parseStr = CONCAT(v_parseStr,v_char);  
        SET i = i + 1;
  ELSE
    SET i=256;
  END IF;

END WHILE; 
RETURN trim(v_parseStr);
END

注:構文が外れる可能性があるため、この回答の関数を再コーディングしました。

4

2 に答える 2

1

SUBSTRING()、LENGTH()を使用して再帰関数を作成できます。この関数は、各文字をチェックしてアルファベット順かどうかを確認し、結果に追加します。

文字列の最後に到達するか、数字にヒットしたら、終了します。

于 2012-06-07T22:34:04.453 に答える
0

各行について、次のことを試してください。

$split = preg_split("/\d/", $your_str);

$split[0]である配列から必要です$split

これはPHPであることに注意してください-@Pabloは正しいですが、これを行うには本当にMySQLが必要ですか?

于 2012-06-07T22:30:19.540 に答える