關於對MYSQL存儲過程傳遞參數是純數字還是字符串的判斷

1、問題的由來

書寫MySQL存儲過程,有時需要判斷傳遞的某參數是數字還是字母和數字或字母組成的字符串,由於MySQL沒有現成的函數,在MSSQL中可以用ISNUMERIC來判斷,因此在MYSQL中需要自己寫函數來判斷了。

2、解決辦法

DELIMITER $$

DROP FUNCTION IF EXISTS `funIsNum` $$
CREATE FUNCTION `funIsNum` (Minfo VARCHAR(25)) RETURNS INT
BEGIN
DECLARE iResult INT DEFAULT 0;
SELECT Minfo REGEXP '^[0-9]*$' INTO iResult;
IF iResult = 1 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END $$

DELIMITER ;

如果返回1,則說明是純數字組成的,如果返回0,則說明是字母等組成的字符串 。

3、參考JS正則表達式

只能輸入數字:"^[0-9]*$"。
只能輸入n位的數字:"^/d{n}$"。
只能輸入至少n位的數字:"^/d{n,}$"。
只能輸入m~n位的數字:。"^/d{m,n}$"
只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
只能輸入非零的正整數:"^/+?[1-9][0-9]*$"。
只能輸入非零的負整數:"^/-[1-9][]0-9"*$。
只能輸入長度爲3的字符:"^.{3}$"。
只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。
只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"。
只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。
只能輸入由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。
只能輸入由數字、26個英文字母或者下劃線組成的字符串:"^/w+$"。
驗證用戶密碼:"^[a-zA-Z]/w{5,17}$"正確格式爲:以字母開頭,長度在6~18之間,只能包含字符、數字和下劃線。
驗證是否含有^%&',;=?$/"等字符:"[^%&',;=?$/x22]+"。
只能輸入漢字:"^[/u4e00-/u9fa5]{0,}$"
驗證Email地址:"^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$"。

^[+-]?/d+$ 整數
^[0-9]*[1-9][0-9]*$ 正整數 (沒有+號)
^-[0-9]*[1-9][0-9]*$ 負整數
^/d+$ 正整數 + 0(非負整數)
^((-/d+)|(0+))$ 負整數 + 0(非正整數)
^[a-zA-Z]+$ 由26個英文字母組成的字符串
^[a-zA-Z0-9]+$ 由數字和26個英文字母組成的字符串
^/w+$ 由數字、26個英文字母或者下劃線組成的字符串
(^/s+)|(/s+$) 首尾空格
[/u4e00-/u9fa5] 匹配中文字符(Unicode編碼),包括簡體、繁體中文
^([0-9]){8}([a-zA-Z]){2}$ 前8位數字,後2位字母
^[/w.]+@[/w]+(/.[/w]{2,3}){1,2}$ email地址
(/w+):////([/w.]+)//(/S*) URL

驗證InternetURL:"^http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?$"。
驗證電話號碼:"^(/(/d{3,4}-)|/d{3.4}-)?/d{7,8}$"正確格式爲:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗證身份證號(15位或18位數字):"^/d{15}|/d{18}$"。
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式爲:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式爲;"01"~"09"和"1"~"31"。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章