I want to show specific data where all the values start with a letter and ends with a number in the city of cansas only.
What my table looks like:
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
What I want:
pID |name | city | key -------------------------------------------- 542 |Z. Francis |Cansas | Z10-30 642 |Q. Snake |Cansas | Z10-25
What I tried and did not work:
SELECT * FROM hotelroom WHERE city LIKE '%Cansas%' AND key LIKE '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ].*[0123456789]$'
Advertisement
Answer
You should use REGEXP, WHERE fields REGEXP regex_string
. Also, you don’t have to write all of the alphabet letter, you could just write it like [a-zA-Z]
.
To be specific: a range is a contiguous series of characters, from low to high, in the ASCII character set.[101] For example, [z-a] is not a range because it’s backwards. The range [A-z] matches both uppercase and lowercase letters, but it also matches the six characters that fall between uppercase and lowercase letters in the ASCII chart: [, , ], ^, _, and ‘.
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]$'
Also,
I want to show specific data where all the values start with a letter and ends with a number in the city of cansas only.
If you only want to get the result from the city of Cansas, you don’t have to use LIKE
. If you’re using LIKE
, it will also match Cansas2
city or anything that has Cansas
as it’s substring.
You could just use equals (=) operator.
SELECT * FROM hotelroom WHERE city = 'Cansas' AND key REGEXP '^[a-zA-Z].*[0-9]$'