SQL IF语句中的正则表达式

时间:2011-05-08 08:17:57

标签: mysql regex triggers

我知道我可以创建基本的比较触发器(见下文)

CREATE TRIGGER HospitalCheck
BEFORE INSERT ON Hospital
FOR EACH ROW
 BEGIN
  IF NEW.HospitalID > 9999 THEN
     call fail('HOSPITAL CODE INVALID');
  END IF;    
END

我如何使用仅允许数字的正则表达式? (而不是> 9999) (相当于SELECT 要检查的字符串 REGEXP'^ [0-9] + $')

我试过了:

IF NEW.HospitalID REGEX '^[0-9]+$' THEN 
  call fail('HOSPITAL CODE INVALID'); 
END IF;

但是我得到了

  

:错误: - > #1064 - 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'REGEX'附近使用正确的语法^ [0-9] + $'然后调用失败('HOSPITAL CODE INVALID');结束如果'在第5行

3 个答案:

答案 0 :(得分:0)

NOT_REGEXP函数 - 请参阅文档http://dev.mysql.com/doc/refman/5.1/en/regexp.html

IF colname NOT_REGEXP '^[0-9]+$' THEN

答案 1 :(得分:0)

如果不是column_name REGEXP'^ [0-9] + $'然后

答案 2 :(得分:0)

只需更改正则表达式

IF NEW.HospitalID REGEX '^[^0-9]+$' THEN 
  call fail('HOSPITAL CODE INVALID'); 
END IF;

说明

  1. 第一个脱字符是 HospitalID 的开头。
  2. 方括号 [ 用于字符类的开始
  3. 第二个脱字符是除 0 到 9 之外的所有字符的转义
  4. 结束方括号用于字符类的结束
  5. 加号字符表示字符类字符必须是一个或多个
  6. 美元字符用于 HospitalID 变量的结尾。

简而言之,这个正则表达式检查 HospitalID 变量,如果发现 HospitalID 变量具有非数字字符,则调用失败函数。