2011-05-08 152 views
1

我知道我可以创建基本比较触发器(见下文)正则表达式IF语句

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] + $'THEN call fail('HOSPITAL CODE INVALID'); END IF '第5行

+0

是的,但我得到一个语法错误 – Mitch 2011-05-08 08:29:06

+0

'IF NEW.HospitalID正则表达式'^[0-9] + $'THEN' 'call fail('HOSPITAL CODE INVALID');' 'END IF;' 'END':ERROR: - >#1064 - 您的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在'REGEX'^ [0-9] + $'THEN call fail('HOSPITAL CODE INVALID'); END IF'在第5行 – Mitch 2011-05-08 08:32:34

+0

如果正则表达式是数值,那么它将标记为无效。或者用NOT_REGEXP替换REGEX(应该是REGEXP),或者在备注上使用'^ [^ 0-9] + $' – 2011-05-08 08:36:14

回答

0

NOT_REGEXP功能 - 看到文档http://dev.mysql.com/doc/refman/5.1/en/regexp.html

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

道歉,如果我还不清楚,我是问我如何将取代 IF NEW.HospitalID> 9999 THEN < - 从上面一个RegExp相当于将只允许码号 – Mitch 2011-05-08 08:28:30

+0

这就是为什么我指出你的功能。这将有利于你从文档中实现该功能,而不是让某人为你写信:) – 2011-05-08 08:33:05

+0

嘿,你可能是对的。感谢您指点我正确的方向! – Mitch 2011-05-08 08:41:39