2017-06-25 44 views
1

我尝试在mysql中创建函数。我想,当检查,如果输入的字符串正确的是(返回1)否(返回0)MySQl创建函数来检查字符串是否正确

字符串IST正确:

-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 ; 

但我不现在怎么都

我tryed检查此字符串:

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”

+0

一些永远不会匹配包含字母的正则表达式。你还应该解释“不起作用”的含义。 –

+0

只要改变你的if语句,就像我在答案中所做的那样。我相信你对整理它非常接近。你的if应该是如果表达!= NULL –

回答

1

尝试在mysql中定期执行expresion。从来就已经在网上测试它,也许不太有:

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

你除了那些2个首要条件说这一切正则表达式检查 - 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 
+0

这似乎工作,但在我的整个查询不起作用 – grooove

+0

添加您的查询和错误,所以我们可以整理出来。 –

+1

查看我编辑过的问题 – grooove

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是它工作的一个例子。

+0

请检查我的编辑 – grooove

+0

我在这里测试它:https://regex101.com/并没有匹配。 –

+0

@PedroBranco。 。 。原始代码有'regexp_like()'。我不知何故将“mysql”标签读为“Oracle”。这并不影响正则表达式。 –

相关问题