2016-05-17 3 views
2

私は英数字の値を含むいくつかの文字列出力を持っています。私はその文字列から唯一の数字を取得したい。これをクエリでどのように取得できますか?どのMySql関数を使用できますか?mysqlの文字列から桁のみを取得するには?

私のクエリは次のようである:

select DISTINCT SUBSTRING(referrerURL,71,6) 
from hotshotsdblog1.annonymoustracking 
where advertiserid = 10 
limit 10; 

出力:

100683 
101313 
19924& 
9072&h 
12368& 
5888&h 
10308& 
100664 
1&hash 
101104 

そして、私は、出力は次のようにしたい:

100683 
101313 
19924 
9072 
12368 
5888 
10308 
100664 
1 
101104 
+0

は&ハッシュ数字を混乱させる単語(部分)のみ? – Mihai

+0

はい。 &ハッシュ。ハッシュはすべての文字列に含まれていません。 –

答えて

8

でこれを行うには、このリンクをたどっ文字列が数字で始まる場合は、あなたがCAST()機能を使用するか、0を追加することによって、暗黙的に数値に変換することができ、数字以外の文字が含まれています。

SELECT CAST('1234abc' AS UNSIGNED); -- 1234 
SELECT '1234abc'+0; -- 1234 

あなたはthisのようなカスタムfunctionを追加することができ任意文字列から数字を抽出するには:

DELIMITER $$ 

CREATE FUNCTION `ExtractNumber`(in_string VARCHAR(50)) 
RETURNS INT 
NO SQL 
BEGIN 
    DECLARE ctrNumber VARCHAR(50); 
    DECLARE finNumber VARCHAR(50) DEFAULT ''; 
    DECLARE sChar VARCHAR(1); 
    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); 
      END IF; 
      SET inti = inti + 1; 
     END WHILE; 
     RETURN CAST(finNumber AS UNSIGNED); 
    ELSE 
     RETURN 0; 
    END IF;  
END$$ 

DELIMITER ; 

関数が定義されたら、あなたはあなたのクエリでそれを使用することができますが:

SELECT ExtractNumber("abc1234def") AS number; -- 1234 
+0

はい、動作しています。ありがとうございました。 :) –

+0

素晴らしい仕事おかげでね – Darkcoder

2

は、PHPでこれを試してみてください

$string = '9072&h'; 
echo preg_replace("/[^0-9]/", '', $string);// output: 9072 

やMySQL Refer the link

1

てみてください、 クエリレベル、PHPのための

SELECT CAST('1&hash' AS UNSIGNED); 

echo intval('13213&hash'); 
関連する問題