我想将字符串拆分为两部分 - 字符和数字。 字符串看起来像这样:
[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')
我希望将这些字符串拆分为字符(A
,YZ
)和数字,而不是从零开始(123
,456
)。
我更喜欢在SQL中执行此操作,因为它是我希望在程序内部使用的更大语句块的一部分。
答案 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/