Мне нужно получить все записи в лицензиях таблицы MySQL, где числовой столбец содержит ОБА буквы и числа

У меня есть таблица под названием licenses, в которой хранятся номера профессиональных лицензий всех моих пользователей. Существует поле lic_type, которое содержит официальный буквенный код профессиональной лицензии: «PN», «RN», «RT», «APRN», «EO» и так далее. В той же таблице лицензий есть еще один столбец, number, который содержит числовую часть полной информации о лицензии, 2261234, 1234567 и так далее, но это поле не INT, а varchar(18) из-за необходимости некоторых строк (см. в этом вопросе). Я НЕ могу изменить структуру базы данных или тип столбца number. В настоящее время, когда я объединяю эти два поля вместе, это должно дать полное обозначение лицензии.

Например, если lic_type — «RN», а номер — «2676612», то при их объединении получается правильная лицензия для физического лица — RN2676612. Однако полученная мной база данных содержит НЕКОТОРЫЕ записи в столбце number, которые содержат полную лицензию, то есть RN2676612, а не просто цифры. Иногда буквы даже не являются правильным кодом. Например, lic-type может быть «PN», но они могли ввести «LPN2261123», поэтому я не могу найти запись в lic_type в столбце number.

Мне нужен запрос MySQL, который вернет ЛЮБУЮ строку, где number содержит любые буквы и хотя бы одно число. Я должен разрешить ввод полных букв в number, таких как СТУДЕНТ или ОЖИДАНИЕ, но они всегда будут БЕЗ цифр, поэтому любая запись в number, в которой есть буква и цифра, недействительна, и мне нужно исправить. Это позволяет мне обходить все буквенные номера при получении информации от полностью лицензированных клиентов.

В настоящее время я пробовал следующий запрос (в phpMyAdmin):

SELECT * FROM `licenses` WHERE `number` REGEXP '(?=.*\d) (?=.*[A-Z])[\d|\w]*'

который я позаимствовал из примера номерного знака.

Но возвращает ошибку:

#1139 - Got error 'repetition-operator operand invalid' from regexp.

Пожалуйста помоги!

Вам понадобится WHERE `number` REGEXP "[[:alpha:]].*[0-9]|[0-9].*[[:alpha:]]"

Wiktor Stribiżew 17.03.2022 18:39

Работал идеально. Я не являюсь опытным пользователем REGEX. Не могли бы вы объяснить свой ответ, чтобы я мог изменить его, если потребуется, позже для аналогичных проблем? Например, если мне нужно только поле, запись которого НАЧИНАЕТСЯ с букв, а не заканчивается.

Henry Geiter 17.03.2022 18:54

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

Rick James 18.03.2022 02:45

@Rick James - решение уже было дано и принято до того, как вы разместили свой комментарий.

Henry Geiter 18.03.2022 22:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты можешь использовать

WHERE `number` REGEXP "[[:alpha:]].*[0-9]|[0-9].*[[:alpha:]]"

Здесь,

  • [[:alpha:]].*[0-9] - соответствует букве, затем любому нулю или более символов, а затем цифре
  • | - или (поскольку цифра может предшествовать букве)
  • [0-9].*[[:alpha:]] - соответствует цифре, затем любому нулю или более символов, а затем букве.

Другие вопросы по теме