关于MYSQL,我有一个问题。我想创建一个能够检查输入是否以特定格式给出的函数。
输出应具有以下形状:
***x x (a) n (n) (n) (n)
with :
x = letters and numbers
n = numbers
a = letters
brackets = optional Values***
所以到目前为止,我的解决方案是这个(用户“尼克”帮助了我):
CREATE FUNCTION validate_number(testnumber VARCHAR(7))
RETURNS INT
DETERMINISTIC
RETURN testnumber REGEXP '^[[:alnum:]]{2}[[:alpha:]]?[[:digit:]]{1,4}$';
这种方法适用于大多数情况。 但是,当我输入的值超过了可能的元素数量(最大元素= 7)时,我什么也没得到。
示例:
validate_number('00A00002345')
=>没有结果。
你们知道问题出在哪里吗?
非常感谢您。
答案 0 :(得分:1)
您实际上是在指出问题的解决方案:)
只需将VARCHAR(7)
更改为更大的VARCHAR(2000)
答案 1 :(得分:1)
运行您的函数时,出现错误消息:
select validate_number('00A00002345')
数据对于第1行的“ testnumber”列而言太长了
您可以在varchar中添加一个长度。
CREATE FUNCTION validate_number (
in_testnumber VARCHAR(32000)
)
或者,使用text
:
CREATE FUNCTION validate_number (
in_testnumber text
)
RETURNS INT
DETERMINISTIC
BEGIN
RETURN (in_testnumber REGEXP '^[[:alnum:]]{2}[[:alpha:]]?[[:digit:]]{1,4}$');
END;