我有一个MySQL数据库,其字段名称包含全名。要选择姓氏以特定字母开头的所有人,请为此示例说明A,我使用以下查询:SELECT * FROM db WHERE Name LIKE '% A%'
。但是,这也会选择具有以A开头的中间名的用户。无论如何都要更改此查询,以便只选择以A开头的姓氏?
答案 0 :(得分:4)
SELECT * FROM db WHERE Name REGEX ' A[-[:alnum:]'']*$'
答案 1 :(得分:2)
Ignacio的正则表达式非常灵活 - 如果正则表达式完全让你感到困惑,你也可以使用类似的东西:
SELECT * FROM db WHERE LEFT(SUBSTRING_INDEX(Name, ' ', -1), 1) = 'A'
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
答案 2 :(得分:1)
我最近遇到了同样的情况。最佳解决方案是不将名称作为全名存储在数据库中,但是,有时我们无法控制数据并需要解决方案。我最终使用了以下内容:
SELECT * FROM db WHERE Name REGEXP " +[[:<:]]j[-'a-z]{3,}$| +[[:<:]]j[-'a-z]{3,} jr.$| +[[:<:]]j[-'a-z]{3,} sr.$";
这将搜索以“J”开头的姓氏。我发现J和S是最困难的,因为数据库中的某些名称最后包括Jr.或Sr.抛弃了查询。
我必须提到这是一个非常粗略的解决方案,我可以想到许多不合作的情况。它可以很快很长。它使用带有撇号的带连字符的名称或名称进行说明,但是没有可靠的方法来匹配名称。
对正在发生的事情的简要说明:
还可以添加其他案例,例如II或III。
您也可以使用MySQL REGEXP文档作为参考。
答案 3 :(得分:0)
SELECT * FROM db WHERE Name REGEXP '^A'
也可以!