「FALL01」のような文字列があり、そのような文字列から数値を削除する必要があるため、出力はFall
、spring
などのようになります。SQLクエリで番号を削除する方法を教えてください。以下は私のサンプルテーブルです。ありがとう
シーズン ------ FALL01 FALL05 Spring01 Summer06
「FALL01」のような文字列があり、そのような文字列から数値を削除する必要があるため、出力はFall
、spring
などのようになります。SQLクエリで番号を削除する方法を教えてください。以下は私のサンプルテーブルです。ありがとう
シーズン ------ FALL01 FALL05 Spring01 Summer06
このために手動で作成することをお勧めします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 が末尾の番号を削除する値であると仮定すると、次の式で必要な処理が行われます。
left( @str, length(@str) - length( reverse( concat(@str, "1") ) + 0 ) + 1 );
基本的に、文字列を反転し、反転した文字列を int に変換して数値の接尾辞 (反転するとプレフィックスになる) の長さを調べ、元の文字列から左端の N 文字を取得します。ここで、N は文字列の長さから数値の接尾辞の長さを引いたものです。0 で終わる文字列を考慮し、末尾番号のない文字列を処理するには、追加の "1" と + 1 が必要です。
このキャスト トリックの使用は、MySQL でのみ機能すると思います。
数字が文字列の先頭にあることがわかっている場合は、ASCII()
関数を使用して数字の ASCII 範囲を確認できます。
たとえば、これは住所から番地を削除します。
SELECT IF(ASCII(address) BETWEEN 48 AND 57, substring_index(address, ' ', -2), address)
FROM user;
ASCII()
文字列の最初の桁の ASCII 値のみを返し、SUBSTRING_INDEX()
最初の空白文字の後のすべてを取得するために使用されます。