1

「FALL01」のような文字列があり、そのような文字列から数値を削除する必要があるため、出力はFallspringなどのようになります。SQLクエリで番号を削除する方法を教えてください。以下は私のサンプルテーブルです。ありがとう

シーズン
------
FALL01
FALL05
Spring01
Summer06
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 が末尾の番号を削除する値であると仮定すると、次の式で必要な処理が行われます。

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

基本的に、文字列を反転し、反転した文字列を int に変換して数値の接尾辞 (反転するとプレフィックスになる) の長さを調べ、元の文字列から左端の N 文字を取得します。ここで、N は文字列の長さから数値の接尾辞の長さを引いたものです。0 で終わる文字列を考慮し、末尾番号のない文字列を処理するには、追加の "1" と + 1 が必要です。

このキャスト トリックの使用は、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 に答える