MYSQL: проверка правильности ввода с помощью регулярных выражений REGEX - PullRequest
0 голосов
/ 26 января 2019

У меня есть один вопрос относительно 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')

=> нет результата.

Ребята, вы понимаете, в чем проблема?

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Когда я запускаю вашу функцию, я получаю сообщение об ошибке:

select validate_number('00A00002345')

Данные слишком длинные для столбца 'testnumber' в строке 1

Вы можете добавить длину к 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;
0 голосов
/ 26 января 2019

вы на самом деле указываете на решение проблемы:)

просто измените VARCHAR(7) на что-то большее VARCHAR(2000)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...