我有一个像“FALL01”这样的字符串,我必须从这样的字符串中删除数字,所以输出应该看起来像Fall
,spring
等等。请让我知道如何使用 sql 查询删除数字。以下是我的示例表。谢谢
季节 ------ 秋季01 05 秋季 Spring01 夏季06
我有一个像“FALL01”这样的字符串,我必须从这样的字符串中删除数字,所以输出应该看起来像Fall
,spring
等等。请让我知道如何使用 sql 查询删除数字。以下是我的示例表。谢谢
季节 ------ 秋季01 05 秋季 Spring01 夏季06
我建议您为此手动创建一个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
如果您不想编写自己的存储函数来执行此操作,则使用common_schemareplace_all()
中的函数非常简单。
例如,这将从Season
表格列中的值中删除所有出现的数字 0-9:
select common_schema.replace_all(season,'0123456789','')
from your_table
如果您的数据有最后 2 个字符作为数字,那么您可以使用
select substr(season,1,length(season)-2) from tbl;
假设 @str 是您要从中去除尾号的值,则以下表达式将满足您的需要:
左(@str,长度(@str)-长度(反向(连接(@str,“1”))+0)+1);
基本上,它反转字符串,通过将反转的字符串转换为 int 来找出数字后缀的长度(反转时成为前缀),然后从原始字符串中取出 N 个最左边的字符,其中 N 是字符串长度减去数字后缀长度。需要额外的 "1" 和 + 1 来说明以 0 结尾的字符串并处理没有尾号的字符串。
我相信使用这个转换技巧只适用于 MySQL。
如果您知道数字将位于字符串的开头,则可以使用该ASCII()
函数并检查数字的 ASCII 范围。
例如,这将从地址中删除门牌号:
SELECT IF(ASCII(address) BETWEEN 48 AND 57, substring_index(address, ' ', -2), address)
FROM user;
ASCII()
仅返回字符串第一个数字的 ASCII 值,然后SUBSTRING_INDEX()
用于获取第一个空格字符之后的所有内容。
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