【问题标题】:regular expressions inside a SQL IF statementSQL IF 语句中的正则表达式
【发布时间】:2011-08-21 01:08:20
【问题描述】:

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

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;

但我明白了

: ERROR : --> #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'REGEX '^[0-9]+$' 附近使用正确的语法 THEN call fail('HOSPITAL CODE INVALID'); END IF' 在第 5 行

【问题讨论】:

  • 是的,但我遇到了语法错误
  • IF NEW.HospitalID REGEX '^[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 行
  • 如果它是数字,则该正则表达式会将其标记为无效。要么用 NOT_REGEXP 替换 REGEX(应该是 REGEXP),要么使用 '^[^0-9]+$'
  • 附带说明,我希望您不要计划在CHECK 声明中使用它... xD

标签: mysql regex triggers


【解决方案1】:

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

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

【讨论】:

  • 抱歉,如果我不清楚,我在问我将如何替换 IF NEW.HospitalID > 9999 THEN
  • 这就是我向您指出该功能的原因。从文档中实现该功能而不是让某人为您编写它会对您有所帮助:)
【解决方案2】:

IF NOT column_name REGEXP '^[0-9]+$' THEN

【讨论】:

    【解决方案3】:

    只需更改正则表达式

    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 变量包含非数字字符,则调用失败函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 2019-11-28
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2013-05-10
      相关资源
      最近更新 更多