Mysql字段取數字函數實現

函數名為GetNum
如果需要取字段中數字(數,包含小數點),比如表A中列a的前三條數據依次為:200萬美元,300億人民幣,4.5億人民幣,用下述函數查詢語句為select GetNum(a) from A。得到結果為:200、300、4.5

drop FUNCTION GetNum;
CREATE FUNCTION GetNum (Varstring varchar(50))

RETURNS varchar(30)

BEGIN

DECLARE v_length INT DEFAULT 0;

DECLARE v_Tmp varchar(50) default ”;

set v_length=CHAR_LENGTH(Varstring);

WHILE v_length > 0 DO

IF ((ASCII(mid(Varstring,v_length,1))>47 and ASCII(mid(Varstring,v_length,1))<58 )or ASCII(mid(Varstring,v_length,1))=46) THEN

set v_Tmp=concat(v_Tmp,mid(Varstring,v_length,1));

END IF;

SET v_length = v_length – 1;

END WHILE;

RETURN REVERSE(v_Tmp);

END;

如果需要取字段中數字(不包含小數點,僅指0~9數字),比如表A中列a的前三條數據依次為:200萬美元,300億人民幣,4.5億人民幣,用下述函數查詢語句為select GetNum(a) from A。得到結果為:200、300、45

drop FUNCTION GetNum;
CREATE FUNCTION GetNum (Varstring varchar(50))

RETURNS varchar(30)

BEGIN

DECLARE v_length INT DEFAULT 0;

DECLARE v_Tmp varchar(50) default ”;

set v_length=CHAR_LENGTH(Varstring);

WHILE v_length > 0 DO

IF (ASCII(mid(Varstring,v_length,1))>47 and ASCII(mid(Varstring,v_length,1))<58
THEN

set v_Tmp=concat(v_Tmp,mid(Varstring,v_length,1));

END IF;

SET v_length = v_length – 1;

END WHILE;

RETURN REVERSE(v_Tmp);

END;

註意:GetNum得到的是一串字符串,如果需要作為數字判斷的話,可以采用0+函數的方式來實現
例如,要實現抽取數字並跟1000比較,語句如下:
select* from A WHERE 0+GetNum(a)>1000

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *