我尝试在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"
答案 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