Mysql 从varchar中修剪非数字和数字
在我的SQL中包含以下列Mysql 从varchar中修剪非数字和数字,mysql,split,varchar,Mysql,Split,Varchar,在我的SQL中包含以下列 identifier ---------- z250 tr015 011s 我想从中提取数字和非数字字符,因此我有如下输出: identifier | pre | number | post -----------+------+--------+----- z250 | z | 250 | NULL tr015 | tr | 015 | NULL 11s | NULL | 11 | s 有人能指出
identifier
----------
z250
tr015
011s
我想从中提取数字和非数字字符,因此我有如下输出:
identifier | pre | number | post
-----------+------+--------+-----
z250 | z | 250 | NULL
tr015 | tr | 015 | NULL
11s | NULL | 11 | s
有人能指出我需要从哪一方面开始寻找吗。该列有大约700条记录,并且没有遵循命名约定,因此该列可以是数字前后任意数量的字符
顺便说一句:返回的字符本身不需要是
NULL
,空字符串也可以。数字的前导零也不重要。MySQL有许多字符串函数将有所帮助
要开始,请参阅
下面是一个使用:alnum:
进行字母数字搜索的示例。取代<代码>:数字:可以用来提取中间的数字。
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
您可以创建如下函数:
对前后进行了一些修改
DROP function IF EXISTS `pre`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `pre`(
vStr CHAR(75)) RETURNS char(32) CHARSET latin1
BEGIN
DECLARE vInd, vLen SMALLINT DEFAULT 1;
DECLARE vReturn CHAR(32) DEFAULT '';
DECLARE vCharacter CHAR(1);
REPEAT
SET vLen = CHAR_LENGTH(vStr);
BEGIN
SET vCharacter = MID(vStr,1,1);
IF vCharacter REGEXP '[[:digit:]|[:punct:]]' THEN
SET vReturn:=NULL;
RETURN vReturn;
ELSE
SET vCharacter = MID(vStr,vInd,1);
IF vCharacter REGEXP '[[:alpha:]]' THEN
SET vReturn=CONCAT(vReturn,vCharacter);
SET vInd =vInd+1;
ELSE
SET vInd:=vLen+1;
END IF;
END IF;
END;
UNTIL vInd > vLen END REPEAT;
RETURN vReturn;
END$$
DELIMITER ;
DROP function IF EXISTS `post`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `post`(
vStr CHAR(75)) RETURNS char(32) CHARSET latin1
BEGIN
DECLARE vInd,limite, vLen SMALLINT DEFAULT 1;
DECLARE vReturn CHAR(32) DEFAULT '';
DECLARE vCharacter CHAR(1);
SET vInd = 1;
SET vLen = CHAR_LENGTH(vStr);
SET limite=vLen;
REPEAT
BEGIN
SET vCharacter = MID(vStr,vLen,1);
IF vCharacter REGEXP '[[:digit:]|[:punct:]]' THEN
SET vReturn:=NULL;
RETURN vReturn;
ELSE
SET vCharacter = MID(vStr,vLen-vInd+1,1);
IF vCharacter REGEXP '[[:alpha:]]' THEN
SET vReturn=CONCAT(vCharacter,vReturn);
SET vInd=vInd+1;
ELSE
SET vInd=limite+1;
END IF;
END IF;
END;
UNTIL vInd > limite END REPEAT;
RETURN vReturn;
END$$
DELIMITER ;
和查询:
SELECT identifier,pre(identifier) as pre,num(identifier) as num,post(identifier) as post FROM table
你能看看MYSQL的字符串函数吗?也许可以看看regexp函数。谢谢你给我指点regex。你能告诉我这些如何帮助我提取数字吗?到目前为止,我只能检查条目是否与模式匹配,但到目前为止,我只能检索到TRUE或False。请看一下这个问题,它似乎非常相似。