Mysql:将字符串拆分为字符和数字

时间:2016-04-25 18:25:31

标签: mysql regex string

我想将字符串拆分为两部分 - 字符和数字。 字符串看起来像这样:

[A-Z]{1,2}0*[0-9]+

或:

one or two characters, then variable number of zeroes, and variable number of numbers

示例:

'A123' => ('A', '123')

'YZ00000456' => ('YZ', '456')

我希望将这些字符串拆分为字符(AYZ)和数字,而不是从零开始(123456)。

我更喜欢在SQL中执行此操作,因为它是我希望在程序内部使用的更大语句块的一部分。

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是创建用户定义的函数,查看字符串的每个字母并确定是否应将其添加到返回值。以下是两个可能适合您的功能。

CREATE FUNCTION grab_chars(s varchar(50))
RETURNS varchar(50)
BEGIN
  SET @str = s, @char = '',@return_str = '';
  WHILE LENGTH(@str) > 0 DO
     SET @char = LEFT(@str,1);
     IF ASCII(@char) BETWEEN ASCII('a') AND ASCII('z') OR
        ASCII(@char) BETWEEN ASCII('A') AND ASCII('Z') THEN
        SET @return_str = CONCAT(@return_str,@char);
     END IF;
     SET @str = RIGHT(@str,LENGTH(@str)-1);
  END WHILE;
  RETURN @return_str;
END/

CREATE FUNCTION grab_nums(s varchar(50))
RETURNS INT
BEGIN
  SET @str = s, @char = '',@return_str = '';
  WHILE LENGTH(@str) > 0 DO
     SET @char = LEFT(@str,1);
     IF ASCII(@char) BETWEEN ASCII('0') AND ASCII('9') THEN
        SET @return_str = CONCAT(@return_str,@char);
     END IF;
     SET @str = RIGHT(@str,LENGTH(@str)-1);
  END WHILE;
  RETURN CONVERT(@return_str,UNSIGNED);
END/

sqlfiddle to show these functions in action