Проверить формат varchar. my SQL
Привет помогите пож. закончить функцию. (С. ниже)
Чем проверить Номер Рейса (Варчар)? Он может быть мин. 3 и мах. 8 знаков. Я уже это проверерила в Функции.
drop function if exists validate_flight_number;
DELIMITER $$
CREATE FUNCTION validate_flight_number (fln varchar(8))RETURNS int
BEGIN DECLARE result_c int;
IF char_length(fln) >= 3
and char_length(fln) <= 8
and ??????????
THEN SET result_c = 1;
ELSE set result_c = 0 ;
END IF;
RETURN result_c;
END$$
DELIMITER ;
Но не могу придумать как проверить следующие условия (вместо ?????????):
Эта сволочь не работает как надо((((((((
{}
x{n}
and x{m,n}
This notation is used to match many instances of the x
. In the case of x{n}
the match must be exactly that many times. In the case of x{m,n}
, the match can occur from m
to n
times. For example, to match zero or one instance of the string ari
(which is identical to (ari)?
), the following can be used:
SELECT 'Maria' REGEXP '(ari){0,1}'; +-----------------------------+ | 'Maria' REGEXP '(ari){0,1}' | +-----------------------------+ | 1 | +-----------------------------+
Почему вы так думаете? Вы выполнили SELECT 'Maria' REGEXP '(ari){0,1}'
Какой результат вы ожидали увидеть?
Вероятно, 0, так как "Maria" - явно не номер рейса.
Нинадатарапицца! До номера рейса нам ещё идти и идти. Пока что мы ищем ari в Maria.
Почему вы так думаете? Вы выполнили SELECT 'Maria' REGEXP '(ari){0,1}'
Какой результат вы ожидали увидеть?
'Maria' это просто пример из сети. Но если применить только этот синтакс на номер рейса, то не работает:
fln regexp '[a-zA-Z0-9]{1}[a-zA-Z0-9]{1}[a-zA-Z]{0,1}[0-9]{1}[0-9]{0,1}[0-9]{0,1}[0-9]{0,1}[a-zA-Z]{0,1}'
ИЗ задания: xx(a)n(n)(n)(n)(a)
x : (a-zA-Z0-9) --> [a-zA-Z0-9]{1}
x: (a-zA-Z0-9) --> [a-zA-Z0-9]{1}
(a): (a-zA-Z)--> [a-zA-Z]{0,1}
n: (0-9)-->[0-9]{1}
(n):(0-9)-->[0-9]{0,1}
(n):(0-9)-->[0-9]{0,1}
(n):(0-9)-->[0-9]{0,1}
(a): (a-zA-Z)--> [a-zA-Z]{0,1}
Мне нужно что то найти, что б с интексом работало (как индекс в стринге/списке).
select '55?8777K' regexp '[a-zA-Z0-9]{1}[a-zA-Z0-9]{1}[a-zA-Z]{0,1}[0-9]{1}[0-9]{0,1}[0-9]{0,1}[0-9]{0,1}[a-zA-Z]{0,1}';
-->1((((((((((
Может все возможные комбинации в if then опросить?
^
Match the beginning of a string
$
Match the end of a string.
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#regexp...
[a-zA-Z0-9]{1}[a-zA-Z0-9]{1} = [a-zA-Z0-9]{2}
[a-zA-Z]{0,1} = [a-zA-Z]?
[0-9]{1}[0-9]{0,1}[0-9]{0,1}[0-9]{0,1} = [0-9]{1,4}
я думаю это не поможет. regexp видит мой стринг как салат и говорит есть ли в нем например огурцы или помидоры. Если там еще носки в салате ему все равно. А мне нужно чтоб он полку видел, где слева на право лежит огурец, огурец, помидор и т.д.
[a-zA-Z]{0,1} = [a-zA-Z]
к сожалению нет. Все что в скобках например (a), (n) может быть на этом месте в номере, а может и не быть. Поэтому {0,1} Минимально 0, максимально 1
Это эквивалентные выражения. Просто чуть короче. Сути не меняет.
Решение твоей проблемы постом выше.
'Maria' это просто пример из сети. Но если применить только этот синтакс на номер рейса, то не работает:
fln regexp '[a-zA-Z0-9]{1}[a-zA-Z0-9]{1}[a-zA-Z]{0,1}[0-9]{1}[0-9]{0,1}[0-9]{0,1}[0-9]{0,1}[a-zA-Z]{0,1}'
"Оно не работает" слишком старая шутка. Не смешно.
Что именно "не работает"? Не возвращает 1 для АА0 или не возвращает 0 для 123BBB? Пример данных дайте, с которыми у вас "не работает".
И исправьте выражение как вам выше предложили, сделайте покороче.
Решение твоей проблемы постом выше.
Слишком быстро. Так ТС ничего не поймёт, скопипастит все эти ^ и $ как мощное колдунство и будет лепить всюду, где что-то не работает :)
А мне нужно чтоб он полку видел, где слева на право лежит огурец, огурец, помидор и т.д.
Try "substring":