MySQL, как проверить, если значение начинается с буквы и заканчивается цифрой? - PullRequest
0 голосов
/ 29 июня 2019

Я хочу показать конкретные данные, где все значения начинаются с буквы и заканчиваются цифрой только в городе Канзас.

Как выглядит моя таблица:

hotelroom

pID     |name       |  city |   key
--------------------------------------------
543     |H. Stein   |Cansas   | 16Z004
542     |Z. Francis |Cansas   | Z10-30
642     |Q. Snake   |Cansas   | Z10-25
645     |P. Brown   |Kentucky | Z10-40

Что я хочу:

pID     |name       |  city |   key
--------------------------------------------
542     |Z. Francis |Cansas |   Z10-30
642     |Q. Snake   |Cansas |   Z10-25

То, что я пробовал и не получалось:

SELECT * FROM hotelroom
WHERE city LIKE '%Cansas%' AND
key LIKE '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ].*[0123456789]$'

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Вы должны использовать REGEXP , WHERE fields REGEXP regex_string. Кроме того, вам не нужно писать все буквы алфавита, вы можете просто написать это как [a-zA-Z].

Чтобы быть точным: диапазон - это непрерывная серия символов, от низкого на высокий, в наборе символов ASCII. [101] Например, [z-a] не является Диапазон, потому что это назад. Диапазон [A-z] совпадает с прописными буквами и строчные буквы, но это также соответствует шести символам, которые переходите между прописными и строчными буквами в диаграмме ASCII: [, \, ], ^, _ и '.

https://docstore.mik.ua/orelly/unix3/upt/ch32_08.htm

SELECT * FROM hotelroom
WHERE city LIKE '%Cansas%' AND
key REGEXP '^[a-zA-Z].*[0-9]$'

Кроме того,

Я хочу показать конкретные данные, где все значения начинаются с буквы и заканчивается номером только в городе Канзас.

Если вы хотите получить результат только из города Канзас, вам не нужно использовать LIKE. Если вы используете LIKE, он также будет соответствовать Cansas2 городу или всему, что имеет Cansas в качестве подстроки.

Вы можете просто использовать оператор равно (=) .

SELECT * FROM hotelroom
WHERE city = 'Cansas' AND
key REGEXP '^[a-zA-Z].*[0-9]$'
0 голосов
/ 29 июня 2019

Вы должны использовать RLIKE вместо LIKE

SELECT * FROM hotelroom
WHERE city LIKE '%Cansas%' AND
key RLIKE '^[a-zA-z].*[0-9]$'

Документация, которую вы можете найти здесь: https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp

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