MySQl创建函数以检查字符串是否正确

时间:2017-06-25 11:53:13

标签: mysql sql function

我尝试在mysql中创建函数。我想检查输入字符串是否正确(返回1)或不返回(返回0)

在以下情况下字符串是正确的:

-has 3(big letters) to 8 symbols XXaZzzza:

- X are either A-Z or a-z or 0-9

- a could doesn't exsist or is a-z or A-Z

- Z is 0-9

- z could doesn't exsist or is 0-9

我知道代码应该是这样的:

 CREATE FUNCTION ID(ID INT)
    RETURNS INT
    BEGIN
        DECLARE {CODE}
        RETURN ;
    END //

DELIMITER ;

但我现在不知道如何检查这个字符串

我尝试过:

 CREATE FUNCTION ID(ID INT)
    RETURNS char
    BEGIN
DECLARE Num char;
    IF NUM REGEXP '^([a-zA-Z0-9]{2}[0a-zA-Z]?[0-9][0-9]?[0-9]?[0-9]?[0a-zA-Z]?)' THEN Return "1";
    ELSE Return 0;
    END IF;
RETURN Num;
END;

但仍然不起作用,所有输入的回报" 0"

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式执行此操作:

select (str regexp '^[A-Z]{3}[a-zA-Z0-9]{2}[a-zA-Z]?[a-zA-Z0-9][0-9]{1,4}[a-zA-Z]?$')

如果要区分字符的大小写,请确保该列具有区分大小写的排序规则。

Here就是它的一个例子。

答案 1 :(得分:1)

尝试在mysql中进行常规表达。我一直在网上测试,也许还没有在那里测试:

^([a-zA-Z0-9]{2}[0a-zA-Z]?[0-9][0-9]?[0-9]?[0-9]?[0a-zA-Z]?)

这个正则表达式检查你说的所有内容,除了那两个第一个条件--3个大写字母和8个字符。

如果您需要用户输入查询,请使用以下内容:

select regexp_like(:input, '^[a-zA-Z0-9]{2}[0a-zA-Z]?[0-9][0-9]?[0-9]?[0-9]?[0a-zA-Z]?$');



DROP FUNCTION IF EXISTS `test` $$
CREATE FUNCTION `test` (param INT) RETURNS INT(1)
BEGIN

IF EXISTS (select str regexp '^[A-Z]{3}[a-zA-Z0-9]{2}[a-zA-Z]?[a-zA-Z0-9][0-9]{1,4}[a-zA-Z]?$'
from (select param as str) x)

 Then 
 return 1;
 ELSE
 return 0;

ENDIF