我想显示仅在cansas市中所有值都以字母开头和以数字结尾的特定数据。
我的桌子是什么样的:
旅馆房间
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]$'
最佳答案
您应该使用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]$'
也,
我想显示所有值以字母开头的特定数据
并且仅以cansas市中的数字结尾。
如果只想从Cansas市获取结果,则不必使用
LIKE
。如果您使用的是LIKE
,它还将匹配Cansas2
城市或任何以Cansas
作为其子字符串的东西。您可以只使用equals (=) operator。
SELECT * FROM hotelroom
WHERE city = 'Cansas' AND
key REGEXP '^[a-zA-Z].*[0-9]$'