MYSQL: проверка входных значений в определенном формате в функции - 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_of_number(testnumber VARCHAR(7))
RETURNS INT
DETERMINISTIC
RETURN
    CASE
        WHEN
            (SELECT * FROM flightexecution WHERE FlightNo REGEXP 
            '^[[:alnum:]+[:alnum:]] + [[:alpha:]|''] + [:digit:] + 
            [[:digit:]|''] + [[:digit:]|''] + [[:digit:]|'']') > 0
            Then 1
            Else 0
            END;`

Однако, это не работает, и я не знаю почему.Выход просто «ОК» без какой-либо дополнительной информации.

1 Ответ

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

Я предполагаю, основываясь на вашем описании действительных значений и контексте вашего вопроса, что значения, которые вы пытаетесь проверить, выглядят примерно как CX727 или QF1566 или BA1 и т. Д. (Т.е. коды обозначения полета IATA),В этом случае эта функция выдаст вам нужные результаты:

CREATE FUNCTION validate_of_number(testnumber VARCHAR(7))
RETURNS INT
DETERMINISTIC
RETURN testnumber REGEXP '^[[:alnum:]]{2}[[:alpha:]]?[[:digit:]]{1,4}$';

Примеры:

SELECT validate_of_number('A1B4352')
     , validate_of_number('QF12')
     , validate_of_number('CX727')
     , validate_of_number('AB14352')
     , validate_of_number('BA1')
     , validate_of_number('1C42')

Вывод

1, 1, 1, 0, 1, 1

Демонстрация на dbfiddle

С точки зрения использования его с вашей таблицей вы можете использовать запрос типа

SELECT * FROM flightexecution WHERE validate_of_number(FlightNo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...