Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Проверить формат varchar. my SQL

1287  1 2 3 4 все
NightWatch коренной житель21.06.21 15:11
NightWatch
NEW 21.06.21 15:11 
в ответ akidervish 21.06.21 15:04

First try it yourself. хаха

#21 
melodi_ постоялец21.06.21 15:20
NEW 21.06.21 15:20 
в ответ MrSanders 21.06.21 14:56
эти ^ и $

Я смотрела что ^ и $ делают. Но я не нашла применения. Ок '^ [a-zA-Z0-9]' можно еще проверять.

Но мой стринг если он трехзначный и заканчивается на '[a-zA-Z]%' то надо 0 -->xx(a), а если 8-значный или 7-6-5-4, то надо 1-->xx(a)n(n)(n)(n)(a). Я думаю надо все таки все варианты с if else????

#22 
akidervish постоялец21.06.21 16:00
NEW 21.06.21 16:00 
в ответ melodi_ 21.06.21 15:20, Последний раз изменено 21.06.21 16:18 (akidervish)

Можно проверить первые две позиции, что на этой субстроке длины два - два метчес для х,
потом третью позицию - если там (а) - отрезать субстроку начиная с 4й позиции до конца, если н - с третьей.
Потом проверить конец (полученной субстроки), и если там (а) - из остатка взять субстроку без последнего элемента, а если н - то оставить как есть.
И в оставшейся в итоге субстроке проверить, что все н, и что длина лежит в [1;4].

#23 
melodi_ постоялец21.06.21 16:07
NEW 21.06.21 16:07 
в ответ akidervish 21.06.21 15:04

Спасибо. Это по крайней мере для трехзначного номера работает:

IF char_length(fln) = 3

and SUBSTRING(fln, 1, 2) regexp '[a-zA-Z0-9]{2}' and SUBSTRING(fln, 3, 1) regexp '[0-9]' then set result_c = 1;


#24 
melodi_ постоялец21.06.21 16:25
NEW 21.06.21 16:25 
в ответ akidervish 21.06.21 16:00
Можно проверить первые две позиции, что на этой субстроке длины два - два метчес для х,
потом третью позицию - если там (а) - отрезать субстроку начиная с 4й позиции до конца, если н - с третьей.
Потом проверить конец, и если там (а) - из остатка взять субстроку без последнего элемента, а если н - то оставить как есть.
И в оставшейся субстроке проверить, что все н, и что длина лежит в [1;4].


Спасибо. Я думаю мне понятно и код тоже будет в Вашем варианте покороче, но я уже допишу что начато, то есть: Если стринг длинна 3, то проверь это...Если стринг длинна 4, то проверь то ..и т.д. Мне надо побыстрей и дальше, а Ваш вариант я попробую обязательно, когда время будет.

Еще последняй знак в например в 4х значном стринге SUBSTRING('abcd', -1, 1) или SUBSTRING('abcd', 4, 1) или без разницы?

#25 
MrSanders коренной житель21.06.21 16:29
NEW 21.06.21 16:29 
в ответ melodi_ 21.06.21 16:25, Последний раз изменено 21.06.21 16:33 (MrSanders)
Я смотрела что ^ и $ делают. Но я не нашла применения.

Плохо. Давайте попробуем собрать мысли в кучу, и может всё-таки показать нам пример с которым "всё не работает"?


в Вашем варианте покороче, но я уже допишу что начато, то есть: Если стринг длинна 3, то проверь это...Если стринг длинна 4, то проверь то ..и т.д. Мне надо побыстрей и дальше

А вам не кажется что с regexp решение всё-таки покороче, и пишется быстрее чем несколько if-esle?

#26 
akidervish постоялец21.06.21 16:31
NEW 21.06.21 16:31 
в ответ melodi_ 21.06.21 16:25

I would use the variant with -1, as it doesn't depend on the string length.

#27 
melodi_ постоялец21.06.21 16:51
NEW 21.06.21 16:51 
в ответ MrSanders 21.06.21 16:29
Плохо. Давайте попробуем собрать мысли в кучу, и может всё-таки показать нам пример с которым "всё не работает"?

Проблема в том, что у меня нет определенной концовки номера (если номер больше 3 знаков), чтоб с этим ее тестировать. Плюс ко всему regexp видит мой номер как салат. Только substring + regexp.

#28 
NightWatch коренной житель21.06.21 17:12
NightWatch
NEW 21.06.21 17:12 
в ответ melodi_ 21.06.21 14:26
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((((((((((

Попытка номер три: в твоем же варианте тебе нужно подставить ^ и $ в нужные места, и оно заработает как надо.

#29 
Murr патриот21.06.21 17:21
Murr
NEW 21.06.21 17:21 
в ответ melodi_ 21.06.21 16:51

у меня нет определенной концовки номера (если номер больше 3 знаков), чтоб с этим ее тестировать

------

Тады - оййй,,, Тады проблем не разрешим от слова вааапще... да-да - даже человекоподобным...


Так что вариант - один - изучить необходимое... ну или выбрать другую специальность... безум

#30 
MrSanders коренной житель21.06.21 17:33
NEW 21.06.21 17:33 
в ответ melodi_ 21.06.21 16:51
Проблема в том, что у меня нет определенной концовки номера (если номер больше 3 знаков), чтоб с этим ее тестировать.

Но как-то же вы догадались что "не работает". Как?

#31 
melodi_ постоялец21.06.21 17:40
NEW 21.06.21 17:40 
в ответ NightWatch 21.06.21 17:12
Попытка номер три: в твоем же варианте тебе нужно подставить ^ и $ в нужные места, и оно заработает как надо.

Бля...ну в этом заработает, а в другом нет. хх(а)н(н)(н)(н)(а)(((((

#32 
melodi_ постоялец21.06.21 17:43
NEW 21.06.21 17:43 
в ответ MrSanders 21.06.21 17:33

Сорри... до меня дошло. Ты предлагешь варианты концовок перебрать. Я думала об этом, но там тоже нужен субстринг. Но я в приципе так и делаю, только без ^ и $

#33 
MrSanders коренной житель21.06.21 17:45
NEW 21.06.21 17:45 
в ответ melodi_ 21.06.21 17:40

Почему вы так думаете? Революционное сознание подсказывает? Приведите пример, с которым оно "не заработает".

Да, кстати, а вы вообще понимаете как работает регулярное выражение?

#34 
NightWatch коренной житель21.06.21 17:52
NightWatch
NEW 21.06.21 17:52 
в ответ MrSanders 21.06.21 17:45
Да, кстати, а вы вообще понимаете как работает регулярное выражение?

По идее, да. Задание дано явно на знание регулярных выражений. Значит, тема была. Сомневаюсь, что преподаватель на данном этапе хочет выявить студентов, способных хоть частично, рудиментарно реализовать алгоритм для регулярных варажений.

#35 
melodi_ постоялец21.06.21 17:53
NEW 21.06.21 17:53 
в ответ MrSanders 21.06.21 17:45
Да, кстати, а вы вообще понимаете как работает регулярное выражение?

Если сможете объяснить буду очень благодарна, а то тот кто мог(и должен) бы объяснить, сказал у Гугла спрашивать.

#36 
NightWatch коренной житель21.06.21 17:59
NightWatch
NEW 21.06.21 17:59 
в ответ melodi_ 21.06.21 17:53

А, ты же в уни учишься. Там это в порядке вещей.

#37 
melodi_ постоялец21.06.21 18:03
NEW 21.06.21 18:03 
в ответ NightWatch 21.06.21 17:52

Поверь ничего нет. Вот обзор актуальных тем (красным). Синтакс функций да показал, недостатки сказал гуглить. Я так и делаю. Функции с его Лекций пишу, остальное гуглю или сдесь спрашиваю.


#38 
NightWatch коренной житель21.06.21 18:07
NightWatch
NEW 21.06.21 18:07 
в ответ melodi_ 21.06.21 18:03

Ну, уни же. Профессор задает только направление. Студенты занимаются изучением сами.

#39 
melodi_ постоялец21.06.21 18:16
NEW 21.06.21 18:16 
в ответ NightWatch 21.06.21 18:07
Сомневаюсь, что преподаватель на данном этапе хочет выявить студентов, способных хоть частично, рудиментарно реализовать алгоритм для регулярных варажений.

Я подозреваю, более конкретно это буду на модуле "Алгоритмы" проходить, но это только в 2022. Пока я должна ДБ без теории алгоритмов осилить.

Пока я думаю достаточно знать, что стринг это если я не ошибаюсь список, поэтому на нем индексация в функции субстринг работает.

#40 
1 2 3 4 все