我有一个像“FALL01”这样的字符串,我必须从这样的字符串中删除数字,所以输出应该看起来像Fall
,spring
等。请告诉我如何使用sql查询删除数字。以下是我的样本表。感谢
Season ------ FALL01 FALL05 Spring01 Summer06
答案 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