从mysql中的字符串中删除数字

时间:2012-12-13 07:31:16

标签: mysql

我有一个像“FALL01”这样的字符串,我必须从这样的字符串中删除数字,所以输出应该看起来像Fallspring等。请告诉我如何使用sql查询删除数字。以下是我的样本表。感谢

Season
------
FALL01
FALL05
Spring01
Summer06

6 个答案:

答案 0 :(得分:5)

我建议您为此手动创建User Define Function。这是一个很棒的教程,你可以使用

代码段:

DELIMITER $$ 

DROP FUNCTION IF EXISTS `uExtractNumberFromString`$$
CREATE FUNCTION `uExtractNumberFromString`(in_string varchar(50)) 
RETURNS INT
NO SQL

BEGIN

    DECLARE ctrNumber varchar(50);
    DECLARE finNumber varchar(50) default ' ';
    DECLARE sChar varchar(2);
    DECLARE inti INTEGER default 1;

    IF length(in_string) > 0 THEN

        WHILE(inti <= length(in_string)) DO
            SET sChar= SUBSTRING(in_string,inti,1);
            SET ctrNumber= FIND_IN_SET(sChar,'0,1,2,3,4,5,6,7,8,9');

            IF ctrNumber > 0 THEN
               SET finNumber=CONCAT(finNumber,sChar);
            ELSE
               SET finNumber=CONCAT(finNumber,'');
            END IF;
            SET inti=inti+1;
        END WHILE;
        RETURN CAST(finNumber AS SIGNED INTEGER) ;
    ELSE
        RETURN 0;
    END IF;

END$$

DELIMITER ;

创建函数后,您现在可以轻松地从字符串中删除数字,例如

SELECT uExtractNumberFromString(Season)
FROM   TableName

答案 1 :(得分:2)

如果您的数据的最后2个字符是数字,那么您可以使用

select substr(season,1,length(season)-2) from tbl;

答案 2 :(得分:1)

假设@str是您要从中删除尾数的值,以下表达式将执行您所需的操作:

    left(@str,length(@str) - length(reverse(concat(@str,“1”))+ 0)+ 1);

基本上,它会反转字符串,通过将反向字符串转换为int来找出数字后缀的长度(在反转时成为前缀),然后从原始字符串中取N个最左边的字符,其中N是字符串长度减去数字后缀长度。需要额外的“1”和+ 1来计算以0结尾的字符串并处理没有尾号的字符串。

我相信使用这个演员技巧只适用于MySQL。

答案 3 :(得分:1)

如果您不想编写自己的存储函数来执行此操作,则使用replace_all()中的common_schema函数非常简单。

例如,这将从表格Season列中的值中删除数字0-9的所有出现:

select common_schema.replace_all(season,'0123456789','')
from your_table

答案 4 :(得分:0)

如果您知道数字将在字符串的开头,您可以使用ASCII()函数并检查数字的ASCII范围。

例如,这将删除地址中的门牌号码:

SELECT IF(ASCII(address) BETWEEN 48 AND 57, substring_index(address, ' ', -2), address)
FROM user;

ASCII()仅返回字符串第一个数字的ASCII值,然后SUBSTRING_INDEX()用于获取第一个空格字符后的所有内容。

答案 5 :(得分:0)

John Woo建议对UDF进行修改。

DELIMITER $$ 

DROP FUNCTION IF EXISTS `uExtractNonNumbersFromString`$$
CREATE FUNCTION `uExtractNonNumbersFromString`(in_string varchar(50)) 
RETURNS text
NO SQL

BEGIN

    DECLARE ctrNumber varchar(50);
    DECLARE finText text default ' ';
    DECLARE sChar varchar(2);
    DECLARE inti INTEGER default 1;

    IF length(in_string) > 0 THEN

        WHILE(inti <= length(in_string)) DO
            SET sChar= SUBSTRING(in_string,inti,1);
            SET ctrNumber= FIND_IN_SET(sChar,'0,1,2,3,4,5,6,7,8,9');

            IF ctrNumber = 0 THEN
               SET finText=CONCAT(finText,sChar);
            ELSE
               SET finText=CONCAT(finText,'');
            END IF;
            SET inti=inti+1;
        END WHILE;
        RETURN finText;
    ELSE
        RETURN '';
    END IF;

END$$

DELIMITER ;

创建上述函数,然后调用为

SELECT uExtractNonNumbersFromString(Season)
FROM   TableName