1

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

季节
------
秋季01
05 秋季
Spring01
夏季06
4

6 回答 6

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
于 2012-12-13T08:15:52.080 回答
3

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

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

select common_schema.replace_all(season,'0123456789','')
from your_table
于 2013-12-11T00:28:26.100 回答
2

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

select substr(season,1,length(season)-2) from tbl;
于 2012-12-13T07:35:57.590 回答
1

假设 @str 是您要从中去除尾号的值,则以下表达式将满足您的需要:

左(@str,长度(@str)-长度(反向(连接(@str,“1”))+0)+1);

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

我相信使用这个转换技巧只适用于 MySQL。

于 2013-10-07T12:02:56.913 回答
0

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

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

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

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

于 2016-04-14T22:11:20.220 回答
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
于 2020-03-17T12:32:38.537 回答