我有一个MySQL数据库,其中有一个包含全名的字段名称。要选择姓氏以特定字母开头的所有人员,本例假设为A,我使用以下查询:SELECT * FROM db WHERE Name LIKE '% A%'。但是,这也会选择中间名以A开头的用户。是否要更改此查询,以便只选择以A开头的姓氏?
发布于 2010-03-11 13:46:20
SELECT * FROM db WHERE Name REGEX ' A[-[:alnum:]'']*$'发布于 2010-03-11 13:49:23
Ignacio的Regex工作起来更灵活--如果Regex完全把你搞糊涂了,你也可以用这样的东西:
SELECT * FROM db WHERE LEFT(SUBSTRING_INDEX(Name, ' ', -1), 1) = 'A'
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
发布于 2013-03-07 04:20:21
我最近也遇到了同样的情况。最好的解决方案是不将姓名作为全名存储在数据库中,然而,有时我们无法控制数据,需要一个解决方案。我最终使用了以下内容:
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文档作为参考。
https://stackoverflow.com/questions/2422807
复制相似问题